Browse Source

cleanup okey, proper login

SRV1 11 years ago
parent
commit
fc9f743941
3 changed files with 24 additions and 321 deletions
  1. 2 1
      apps/web/priv/static/app/index.htm
  2. 2 0
      apps/web/priv/static/app/js/bootloader.js
  3. 20 320
      apps/web/src/okey.erl

+ 2 - 1
apps/web/priv/static/app/index.htm

@@ -10,7 +10,8 @@
     <link href="css/main.css" rel="stylesheet" type="text/css" />
 </head>
 <body>
-
+ 
+    <div id="fb-root"/>
     <svg id="Refined" style="top:0; left:0; height:100%; width:100%;"></svg>
 
     <script src="js/n2o/bert.js"></script>

+ 2 - 0
apps/web/priv/static/app/js/bootloader.js

@@ -172,6 +172,8 @@ function translateScene(e)
     $("#You-Discard-Shape").hide();
 
     $('#Facebook-Login').on('click',function(x) { fb_login(); });
+    $('#Facebook-Login').attr({cursor:'pointer'});
+    $('#Login-Text')[0].style.cursor = 'pointer';
 
 //    $("#Okey").hide();
     $("#Okey").on("click", sendSawOkey);

+ 20 - 320
apps/web/src/okey.erl

@@ -14,15 +14,6 @@ game_form() ->
         undefined -> 1000001;
         X -> wf:to_integer(X) end.
 
--record(player, {id, label, info, take, discard, history = []}).
-
--define(RESET_ELEMENTS, [
-    {gosterge, #label{ id = gosterge, body="Gosterge: "}},
-    {h1, #dropdown{ id = h1, options = []}},
-    {h2, #dropdown{ id = h2, options = []}},
-    {h3, #dropdown{ id = h3, options = []}},
-    {h4, #dropdown{ id = h4, options = []}} ]).
-
 new_user() ->
     Imagionary = anonymous:imagionary_users(),
     {Id,Name,Surname} = lists:nth(crypto:rand_uniform(1,length(Imagionary)),Imagionary),
@@ -40,12 +31,24 @@ new_user() ->
 new_facebook_user(User) ->
     ExistingUser = user(),
     Score = proplists:get_value(score,ExistingUser#user.tokens,0),
+    Skill = case kvs:get(reveal_log, User#user.id) of
+       {ok,RL} -> RL#reveal_log.skill;
+       _ -> 0 end,
     U1 = User#user{tokens=game:plist_setkey(score,1,User#user.tokens,{score,Score})},
     U2 = U1#user{tokens=game:plist_setkey(n2o,1,U1#user.tokens,{n2o,get(session_id)})},
+    U3 = U2#user{tokens=game:plist_setkey(skill,1,U2#user.tokens,{skill,Skill})},
+    kvs:add(U3),
+    send_auth_cookies(U3),
+    U3.
+
+send_auth_cookies(User) ->
     wf:wire(wf:f("document.cookie='~s=~s; path=/; expires=~s';",
-        ["n2o-name",wf:to_list(User#user.id),js_session:cookie_expire(js_session:ttl())])),
-    kvs:add(U2),
-    U2.
+        ["n2o-name",wf:to_list(User#user.id),
+        js_session:cookie_expire(js_session:ttl())])),
+    wf:wire(wf:f("document.cookie='~s=~s; path=/; expires=~s';",
+        ["n2o-sid",wf:to_list(proplists:get_value(n2o,User#user.tokens)),
+        js_session:cookie_expire(js_session:ttl())])),
+    ok.
 
 user() -> 
     case wf:user() of
@@ -65,41 +68,9 @@ user() ->
             X;
         U-> U end.
 
-color(Id,Color) -> ok. % wf:wire(wf:f("document.querySelector('#~s').style.color = \"~s\";",[Id,Color])).
-unselect(Id) -> color(Id,black).
-select(Id) -> color(Id,red).
-update(A,B) -> ok.  % wf:update(A,B);
-
-redraw_istaka(TilesList) ->
-    redraw_tiles(TilesList, #dropdown{id = "istaka", postback = combo, source = [istaka]}).
-
-redraw_tiles(undefined, _DropDown) -> [];
-redraw_tiles([] = _TilesList, DropDown = #dropdown{id = ElementId}) ->
-    okey:update(ElementId, [DropDown#dropdown{value = [], options = []}]);
-redraw_tiles([{Tile, _}| _ ] = TilesList, DropDown = #dropdown{id = ElementId}) ->
-    okey:update(ElementId, [DropDown#dropdown{value = Tile,
-             options = [#option{label = CVBin, value = CVBin} || {CVBin, _} <- TilesList]}]).
-
-redraw_players(Players) ->
-    User = user(),
-    [ begin PN = player_name(PI),
-            okey:update(LabelId, #label{ id = LabelId,
-               style= case User#user.id == Id of
-                  true -> "font-weight: bold;";
-                  _ -> "" end, body = <<" ",PN/binary," ">>}) 
-      end || #player{label = LabelId, info =  #'PlayerInfo'{id = Id} = PI} <- Players].
-
-update_players(UpdatedPlayer = #player{label = LabelId}, Players) ->
-    lists:sort(
-      fun(#player{label = E1}, #player{label = E2}) -> E1 < E2 end,
-      [UpdatedPlayer | lists:keydelete(LabelId, #player.label, Players)]
-     ).
-
 player_name(PI) -> auth_server:player_name(PI).
 
-tash(C,V) -> {wf:to_binary([wf:to_list(C)," ",wf:to_list(V)]), {C, V}}.
-
-main() -> #dtl{file="index", bindings=[{title,<<"N2O">>},{body,body()}]}.
+main() -> #dtl{file="index", bindings=[{title,<<"N2O">>},{body,[]}]}.
 
 patch_users() ->
     [ begin
@@ -136,38 +107,9 @@ send_roster_item(Pid,User) ->
     Pid ! {server,{roster_item,User#user.id,User#user.names,User#user.surnames,0}}.
 
 send_roster_group(Pid,List) ->
-%    wf:info(?MODULE,"User Group: ~p",[List]),
+    wf:info(?MODULE,"User Group: ~p",[List]),
     Pid ! {server,{roster_group,List}}.
 
-body() -> [].
-
-body2() -> 
-    wf:wire(#api{name=plusLogin, tag=plus}),
-  [ #panel    { id = history },
-    #button   { id = pluslogin,  body = "Login",       postback = login_button },
-    #label    { id = nothing,    body = " Google"},    #br{}, #br{},
-    #label    { id = gosterge,   body = "Gosterge"},   #br{},
-    #label    { id = player1,    body = "Seat 1"},     #dropdown{id=h1,options=[]}, #br{},
-    #label    { id = player2,    body = "Seat 2"},     #dropdown{id=h2,options=[]}, #br{},
-    #label    { id = player3,    body = "Seat 3"},     #dropdown{id=h3,options=[]}, #br{},
-    #label    { id = player4,    body = "Seat 4"},     #dropdown{id=h4,options=[]}, #br{}, #br{},
-    #button   { id = logout,     body = "Logout",      postback = login_button },
-    #button   { id = attach,     body = "Attach",      postback = attach },
-    #button   { id = join,       body = "Join",        postback = join, source = [games_ids]},
-    #dropdown { id = games_ids,  postback = combo,     options = []}, #br{},
-    #dropdown { id = take_src,                         options = [
-                                                            #option{label="Table",value="0"},
-                                                            #option{label="Left",value="1"}]},
-    #button   { id = take,       body = "Take",        postback = take,    source=[take_src]},
-    #dropdown { id = istaka,                           postback = combo,   source=[istaka],options=[]},
-    #button   { id = discard,    body = "Discard",     postback = discard, source=[istaka]},
-    #button   { id = reveal,     body = "Reveal",      postback = reveal,  source=[istaka]}, #br{},
-    #button   { id = saw_okey,   body = "I Saw Okey",  postback = i_saw_okey},
-    #button   { id = have_8,     body = "8 Tashes",    postback = i_have_8_tashes},
-    #button   { id = pause,      body = "Pause",       postback = pause},
-    #button   { id = info,       body = "PlayerInfo",  postback = player_info} ].
-
-
 event(terminate) -> 
     User = user(),
     wf:send(broadcast,{user_offline,User}),
@@ -176,35 +118,13 @@ event(terminate) ->
 event(init) -> 
     js_session:ensure_sid([],?CTX),
 
-    GamesIds = case game:get_all_games_ids() of
-      [] -> [?GAMEID];
-      List -> List end,
-
-    okey:update(games_ids,#dropdown{id = games_ids, value = ?GAMEID, options = 
-      [#option{label = wf:to_list(GameId), value = wf:to_list(GameId)} || GameId <- GamesIds]}),
-
-    wf:info(?MODULE,"Istaka on Started:",[]),
     event(attach),
     event(join);
 
-event(login_button) -> wf:wire(protocol:logout());
 event(join) -> 
     GameId = get(okey_game_id),
     wf:wire(#api{name=fbLogin, tag=fb}),
     wf:wire(protocol:join(wf:to_list(GameId)));
-event(take) -> 
-    GameId = get(okey_game_id),
-    wf:wire(protocol:take(wf:to_list(GameId), wf:q(take_src)));
-
-event(player_info) -> 
-%    wf:info(?MODULE,"Cowboy Cookies: ~p",[wf:cookies_req(?REQ)]),
-
-    User = user(),
-    wf:cookie(<<"user">>,<<"macim">>,<<"/ws/">>,24 * 60 * 60),
-    Wire = protocol:player_info(
-        wf:f("'~s'",[wf:to_list(User#user.id)]),wf:f("'~s'",[game_okey])),
-    wf:info(?MODULE,"PlayeInfoJS: ~s",[Wire]),
-    wf:wire(Wire);
 
 event(attach) -> 
     {ok,GamePid} = game_session:start_link(self()),
@@ -227,74 +147,16 @@ event(attach) ->
     spawn(fun() ->
         send_roster(Pid),
         already_online(Pid),
-        case kvs:get(user,User#user.id) of
-            {ok,U} -> wf:send(broadcast,{user_online,U});
-             _ -> skip end
+        wf:send(broadcast,{user_online,User})
     end),
     ok;
 
-event(discard) -> 
-    TilesList = get(game_okey_tiles),
-    DiscardCombo = wf:q(istaka),
-    GameId = get(okey_game_id),
-    case lists:keyfind(erlang:list_to_binary(DiscardCombo), 1, TilesList) of
-    {_, {C, V}} ->
-        wf:wire(protocol:discard(wf:to_list(GameId), wf:to_list(C), wf:to_list(V)));
-    false -> wf:info(?MODULE,"Discard Combo: ~p",[DiscardCombo]) end;
-
-event(reveal) ->
-    TilesList = case get(game_okey_tiles) of undefined -> []; T -> T end,
-    Discarded = wf:q(istaka),
-    GameId = get(okey_game_id),
-
-    case lists:keyfind(wf:to_binary(Discarded), 1, TilesList) of
-        {_, {CD, VD} = Key} ->
-            Hand = [{C,V} || {_, {C, V}} <- lists:keydelete(Key, 2, TilesList) ],
-            HandJS = "[[" ++ string:join([
-                wf:f("tuple(atom('OkeyPiece'),~p,~p)",[C,V]) || {C,V} <- Hand],",") ++ "],[]]",
-            RevealJS = protocol:reveal(wf:to_list(GameId),wf:f("~p",[CD]),wf:f("~p",[VD]),HandJS),
-            wf:info(?MODULE,"RevealJS: ~p",[lists:flatten(RevealJS)]),
-            wf:wire(RevealJS);
-        _ ->
-            wf:info(?MODULE,"error discarded ~p", Discarded)
-    end;
-
-event(i_saw_okey) ->
-    wf:info(?MODULE,"i_saw_okey!"),
-    GameId = get(okey_game_id),
-    wf:wire(protocol:i_saw_okey(wf:to_list(GameId)));
-
-event(i_have_8_tashes) ->
-    wf:info(?MODULE,"i_gave_8_tashes!"),
-    GameId = get(okey_game_id),
-    wf:wire(protocol:i_have_8_tashes(wf:to_list(GameId)));
-
-event(pause) ->
-    Action  =
-        case get(game_okey_pause) of 
-            X when X == resume orelse X == undefined -> 
-                put(game_okey_pause, pause),
-                okey:update(pause, [#button{id = pause, body = "Resume", postback = pause}]),
-                "pause";
-            pause ->
-                put(game_okey_pause, resume),
-                okey:update(pause, [#button{id = pause, body = <<"Pause">>, postback = pause}]),
-                "resume"
-        end,
-    GameId = get(okey_game_id),
-    wf:wire(protocol:pause(wf:to_list(GameId), wf:f("~p", [Action])));
-
-%event({binary,M}) -> {ok,<<"Hello">>};
 
 event({client,{message,From,Name,To,Message}}) ->
     wf:info(?MODULE,"Online Chat Message from ~p(~p) to ~p:~n ~p~n",[From,Name,To,Message]),
     wf:send(To,{server,{chat_message,{From,Name},To,wf:to_binary(Message)}}),
     ok;
 
-%event({client,{chat,GameId,Name,Message}}) ->
-%    wf:info(?MODULE,"In-Game Chat Message from ~p(~p):~n ~p~n",[GameId,Name,Message]),
-%    ok;
-
 event({client,Message}) ->
     wf:info(?MODULE,"Client: ~p", [Message]),
     case wf:session(<<"game_pid">>) of
@@ -302,167 +164,6 @@ event({client,Message}) ->
         GamePid -> SyncRes = game_session:process_request(GamePid, Message),
                    wf:info(?MODULE,"Sync Result: ~p",[SyncRes]) end;
 
-event({server, {game_event, _, okey_game_started, Args}}) ->
-    wf:info(?MODULE,"Game Started: ~p", [Args]),
-    {_, Tiles} = lists:keyfind(tiles, 1, Args),
-    TilesList = [tash(C, V) || {_, C, V} <- Tiles],
-    wf:info(?MODULE,"Tile List: ~p",[TilesList]),
-    case lists:keyfind(gosterge, 1, Args) of
-        {_, {_, C, V}} ->
-            wf:info(?MODULE,"Gosterge: ~p ~p",[C,V]),
-            okey:update(gosterge, #label{id = gosterge, body = wf:to_binary(["Gosterge: ", wf:to_list(C), " ", wf:to_list(V)])});
-        _ -> ok end,
-    put(game_okey_tiles, TilesList),
-    put(game_okey_pause, resume),
-    redraw_istaka(TilesList);
-
-event({server, {game_event, _, okey_game_player_state, Args}}) ->
-    wf:info(?MODULE,"Player State: ~p", [Args]),
-    case lists:keyfind(whos_move, 1, Args) of 
-        {_, null} -> ok;
-        {_, WhosMove} ->
-            Players = get(okey_players),
-
-            #player{label = X} = lists:keyfind(WhosMove, #player.id, Players),
-            case X of
-                null -> skip;
-                false -> skip;
-                X -> select(X), put(okey_turn_mark,X) end,
-
-            case lists:keyfind(gosterge, 1, Args) of
-                {_, {_, C, V}} ->
-                    okey:update(gosterge, #label{id = gosterge, body = wf:to_binary(["Gosterge: ", wf:to_list(C), " ", wf:to_list(V)])});
-                _ -> ok end,
-
-            {_, Tiles} = lists:keyfind(tiles, 1, Args),
-            TilesList = [tash(C, V)|| {_, C, V} <- Tiles],
-            wf:info(?MODULE,"Istaka on State"),
-            redraw_istaka(TilesList),
-            put(game_okey_tiles, TilesList),
-
-            {_, Piles} = lists:keyfind(piles, 1, Args),
-
-            UpdatedPlayers = [ begin
-
-                Player = #player{discard = RightPileComboId}
-                       = lists:keyfind(PlayerId, #player.id, Players),
-
-                ConvertedPile = [ tash(C, V) || {_, C, V} <- Pile],
-
-                redraw_tiles(ConvertedPile, #dropdown{id = RightPileComboId}),
-                Player#player{history = ConvertedPile}
-
-            end || {PlayerId, Pile} <- Piles ],
-
-            put(okey_players, lists:sort(fun(#player{label = E1}, #player{label = E2}) ->
-                                E1 < E2 end, UpdatedPlayers));
-       _ -> ok end;
-
-event({server, {game_event, _, okey_tile_taken, Args}}) ->
-    wf:info(?MODULE,"Taken: ~p", [Args]),
-    Im = get(okey_im),
-
-    {_, PlayerId} = lists:keyfind(player, 1, Args),
-    case lists:keyfind(revealed, 1, Args) of
-        {_, {_, C, V}} ->
-            if  Im == PlayerId ->
-                TilesList = [ tash(C, V) | get(game_okey_tiles)],
-                %%wf:info(?MODULE,"Tiles: ~p",[TilesList]),
-                put(game_okey_tiles, TilesList),
-                redraw_istaka(TilesList);
-                true -> ok end,
-            case lists:keyfind(pile, 1, Args) of
-                {_, 1} -> %% have taken from left
-                    Players = get(okey_players),
-
-                    #player{take=From} = lists:keyfind(PlayerId,#player.id,Players),
-                    LeftPlayer = #player{discard=Combo,history=DiscardHistory}
-                               = lists:keyfind(From,#player.label,Players),
-
-                    History = lists:keydelete({C, V}, 2, DiscardHistory),
-                    redraw_tiles(History, #dropdown{id=Combo}),
-                    put(okey_players,update_players(LeftPlayer#player{history=History},Players));
-
-                _ -> ok end;
-       _ -> ok end;
-
-event({server, {game_event, _, okey_tile_discarded, Args}}) ->
-    wf:info(?MODULE,"Discarded: ~p", [Args]),
-    Im = get(okey_im),
-    {_, PlayerId}  = lists:keyfind(player, 1, Args),
-    {_, {_, C, V}} = lists:keyfind(tile, 1, Args),
-
-    if  Im == PlayerId ->
-        TilesListOld = get(game_okey_tiles),
-        TilesList = lists:keydelete({C, V}, 2, TilesListOld),
-        put(game_okey_tiles, TilesList),
-        redraw_istaka(TilesList);
-        true -> ok end,
-
-    Players = get(okey_players),
-    Player  = #player{discard = RightPileComboId, history = OldRightPile}
-            = lists:keyfind(PlayerId, #player.id, Players),
-
-    NewRightPile = [ tash(C, V) | OldRightPile],
-    redraw_tiles(NewRightPile, #dropdown{id = RightPileComboId}),
-    UpdatedPlayer = Player#player{history = NewRightPile},
-    UpdatedPlayers = update_players(UpdatedPlayer, Players),
-    put(okey_players, UpdatedPlayers);
-
-event({server,{game_event, _Game, okey_turn_timeout, Args}}) ->
-    wf:info(?MODULE,"Turn Timeout: ~p", [Args]);
-
-%%event({server, {game_paused, _, _Gameid, Action, Who, _}}) ->
-%%    Im = get(okey_im),
-%%    
-%%    if Im =/= Who ->
-%%            put(game_okey_pause, Action),
-%%            okey:update(pause, [#button{id = pause, body = case Action of pause -> "Resume"; resume -> "Pause" end, postback = pause}]);
-%%       true -> ok end;
-
-event({server, {game_event, _, okey_game_info, Args}}) ->
-    wf:info(?MODULE,"Game Info: ~p", [Args]),
-    {_, PlayersInfo} = lists:keyfind(players, 1, Args),
-
-    [okey:update(ElementId, [Element]) || {ElementId, Element} <- ?RESET_ELEMENTS],
-
-    PlayersTempl = [
-        #player{label = player1, discard = h1, take = player4},
-        #player{label = player2, discard = h2, take = player1},
-        #player{label = player3, discard = h3, take = player2},
-        #player{label = player4, discard = h4, take = player3}],
-
-    Players = lists:zipwith(fun(Players, #'PlayerInfo'{id = Id} = PI) ->
-        Players#player{id=Id,info=PI} end, PlayersTempl, PlayersInfo),
-
-    put(okey_players, Players),
-    redraw_players(Players);
-
-event({server,{game_event, _, player_left, Args}}) ->
-    wf:info(?MODULE,"Player Left: ~p", [Args]),
-    {_, OldPlayerId} = lists:keyfind(player, 1, Args),
-    {_, PI} = lists:keyfind(replacement, 1, Args),
-    #'PlayerInfo'{id = NewPlayerId} = PI,
-    OldPlayers = get(okey_players),
-    OldPlayer = lists:keyfind(OldPlayerId, #player.id, OldPlayers),
-    NewPlayers = update_players(OldPlayer#player{id=NewPlayerId,info=PI}, OldPlayers),
-
-    put(okey_players, NewPlayers),
-    redraw_players(NewPlayers),
-
-    case get(okey_turn_mark) of undefined -> ok; X -> select(X) end;
-
-event({server,{game_event, _, okey_next_turn, Args}}) ->
-    wf:info(?MODULE,"Next Turn: ~p", [Args]),
-    {player, PlayerId} = lists:keyfind(player, 1, Args),
-    #player{label = LabelId} = lists:keyfind(PlayerId, #player.id, get(okey_players)),
-    case get(okey_turn_mark) of
-        undefined -> ok;
-        OldLabelId -> unselect(OldLabelId) end,
-    select(LabelId),
-    put(okey_turn_mark, LabelId);
-
-
 event({server,{roster_group,List}}) -> skip;
 event({server,terminate}) -> event(terminate);
 event({server,{update_score,Score}}) -> 
@@ -476,9 +177,8 @@ event({counter,Res}) -> Pid = self(), spawn(fun() -> Pid ! {server,{online_numbe
 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)}};
 event({user_offline,User}) -> self() ! {server,{offline,User#user.id,User#user.names,User#user.surnames,score(User)}};
 
-event({register,User}) -> wf:info(?MODULE,"Register: ~p",[User]), new_facebook_user(User);%, kvs:add(User#user{id=wf:to_binary(User#user.id)}), wf:user(User);
-event({login,User}) -> wf:info(?MODULE,"Login: ~p",[User]);%, kvs:put(User#user{id=wf:to_binary(User#user.id)}), wf:user(User), event(init);
-
+event({register,User}) -> wf:info(?MODULE,"Register: ~p",[User]), new_facebook_user(User), wf:user(User), wf:wire("window.location='https://kakaranet.com'");
+event({login,User}) -> wf:info(?MODULE,"Login: ~p",[User]), send_auth_cookies(User), wf:user(User), wf:wire("window.location='https://kakaranet.com'");
 
 event(_Event) -> wf:info(?MODULE,"Unknown Event: ~p", [_Event]).