Просмотр исходного кода

update user score with broadcast

SRV1 11 лет назад
Родитель
Сommit
ca5e728d14
2 измененных файлов с 13 добавлено и 8 удалено
  1. 12 7
      apps/server/src/sup/journal.erl
  2. 1 1
      apps/web/src/okey.erl

+ 12 - 7
apps/server/src/sup/journal.erl

@@ -78,14 +78,19 @@ handle_cast({reveal_event, User, Event, GameState}, State) ->
   	  {ok, RL} -> RL end,
     Skill = case SE#reveal_log.skill of X when is_integer(X) -> X; _ -> 0 end,
     Score = case SE#reveal_log.score of X1 when is_integer(X1) -> X1; _ -> 0 end,
-    NewScore = Score+Event#reveal_event.score,
-    wf:send(User,{server,{update_score,NewScore}}),
-    kvs:put(SE#reveal_log{skill=Skill+1,score=NewScore}),
-    gas:info(?MODULE, "Reveal Upadtes User Record: ~p ~p", [User,NewScore]),
-    case kvs:get(user,User) of
+    NewScore = case kvs:get(user,User) of
         {ok,U=#user{tokens=Tokens}} ->
-            kvs:put(U#user{tokens=game:plist_setkey(score,1,Tokens,{score,NewScore})});
-        _ -> skip end,
+            ScoreFromUser = Score+proplists:get_value(score,U#user.tokens,0),
+            kvs:put(U#user{tokens=game:plist_setkey(score,1,Tokens,{score,ScoreFromUser})}),
+            wf:send(User,{server,{update_score,ScoreFromUser}}),
+            ScoreFromUser;
+        _ ->
+            ScoreFromLog = Score+Event#reveal_event.score,
+            wf:send(User,{server,{update_score,ScoreFromLog}}),
+            ScoreFromLog
+    end,
+    gas:info(?MODULE, "Reveal Upadtes User Record: ~p ~p", [User,NewScore]),
+    kvs:put(SE#reveal_log{skill=Skill+1,score=NewScore}),
     {noreply, State};
 handle_cast({series_event, User, Event, GameState}, State) ->
     kvs:add(Event),

+ 1 - 1
apps/web/src/okey.erl

@@ -470,7 +470,7 @@ event({server,{update_score,Score}}) ->
     NewUser = User#user{tokens=game:plist_setkey(score,1,User#user.tokens,{score,Score})},
     gproc:set_value({p,l,broadcast},{wf:peer(?REQ),NewUser}),
     wf:info(?MODULE,"User Process Updated Score ~p ~p",[User#user.id,Score]),
-    event({user_online,NewUser}),
+    wf:send(broadcast,{user_online,NewUser}),
     ok;
 event({counter,Res}) -> Pid = self(), spawn(fun() -> Pid ! {server,{online_number,length(game:online())}} end);
 event({user_online,User}) -> wf:info(?MODULE,"User ~p goes Online",[User#user.id]), self() ! {server,{online,User#user.id,User#user.names,User#user.surnames,score(User)}};