예제 #1
0
        public static void MessageReceived(HS_SocketDataWorker sdw, string message)
        {
            JsonDataMessage request = JsonDataMessage.Parse(message.Trim());

            Log(message);
            if (request.Data1 == "login")
            {
                clients[sdw].userid = request.Data2;
                //TODO make this async
                Log("API call");
                string stringResponse = NetUtil.PostSynchro(Settings.Current.InternalTokenLookupUrl,
                                                            new Dictionary <string, string> {
                    { "code", Settings.Current.InternalApiAccessCode }, { "userid", request.Data2 }
                });
                Log("Response: " + stringResponse);
                ServerResponse response = ServerResponse.Parse(stringResponse);
                clients[sdw].symkey = response.Data1;
                Log("Sym token: " + response.Data1);
                sdw.Symkey = response.Data1;

                JsonDataMessage readyRequest = new JsonDataMessage("ready");
                Log("User joined, sending ready message: " + readyRequest.Json);
                sdw.Send(readyRequest.Json);
                legacy2PlayerQueue.Enqueue(sdw);
            }

            CheckGameStart();
        }
예제 #2
0
        static void MessageReceived(HS_SocketDataWorker sdw, string message)
        {
            //Decrypt
            string       json    = RSAHandler.Decrypt(private_key, message);
            LoginRequest request = LoginRequest.Parse(json);

            Console.WriteLine(json);

            //Check login
            //TODO make this async
            string stringResponse = NetUtil.PostSynchro(Settings.Current.InternalLoginUrl,
                                                        new System.Collections.Generic.Dictionary <string, string>()
            {
                { "code", Settings.Current.InternalApiAccessCode }, { "userid", request.Username },
                { "password", request.Password }, { "key", request.Key }
            });
            ServerResponse response = ServerResponse.Parse(stringResponse);

            Log(stringResponse);

            if (response != null)
            {
                if (response.Result == "success")
                {
                    Log("success sending back");
                    string sec = Convert.ToBase64String(TDESHandler.Encrypt(request.Key, stringResponse));
                    sdw.Send(sec);
                }
                else
                {
                }
            }
        }
예제 #3
0
 public void AddPlayer(HS_PlayerInstance player, HS_SocketDataWorker sdw)
 {
     sockets.Add(player, sdw);
     playerInstances.Add(sdw, player);
     players.Add(player);
     names.Add(player, "Player");
     sdw.SetCallback(new HS_SocketDataWorker.HS_PlayerCommandCallback(PlayerCommandReceived));
 }
예제 #4
0
 public static void CheckGameStart()
 {
     if (legacy2PlayerQueue.Count == 2)
     {
         HS_SocketDataWorker p1 = legacy2PlayerQueue.Dequeue();
         HS_SocketDataWorker p2 = legacy2PlayerQueue.Dequeue();
         StartGame(p1, p2);
     }
 }
예제 #5
0
 void GameMessageReceived(HS_SocketDataWorker sdw, string message)
 {
     try{
         Debug.Log("Raw message received: " + message);
         string MSG = TDESHandler.Decrypt(sym_key, message);
         Debug.Log("Message received: " + MSG);
     }
     catch (Exception e)
     {
         Debug.Log(e.ToString());
     }
 }
예제 #6
0
        public void PlayerCommandReceived(HS_SocketDataWorker sdw, string message)
        {
            if (!gameon)
            {
                return;
            }
            HS_PlayerInstance callingPlayer = playerInstances[sdw];

            JsonDataMessage request = JsonDataMessage.Parse(message.Trim());
            string          query   = request.Data1;

            if (query == "login")
            {
                names[callingPlayer] = request.Data2;
            }
            int    spaceindex = query.IndexOf(' ');
            string q          = (spaceindex > 0) ? query.Substring(0, spaceindex) : query;

            string[] cs       = query.Split(' ');
            string   response = "";

            switch (q)
            {
            case "hands": response = PrintHands(callingPlayer); break;

            case "fields": response = PrintFields(); break;

            //explain card
            case "play": response = Play(callingPlayer, cs); break;

            case "attack": response = Attack(callingPlayer, cs); break;

            case "a": response = Attack(callingPlayer, cs); break;

            case "allface": response = AllFace(callingPlayer, cs); break;

            //case "help": break;
            //case "clear": System.Console.Clear(); break;
            case "end": response = EndTurn(callingPlayer); break;

            case "hero": response = Hero(callingPlayer); break;

            case "whoturn": response = WhoTurn(); break;

            default: response = "Unknown command"; break;
            }
            sdw.Send(response);
            CheckDeadPlayers();
        }
예제 #7
0
        static void AcceptCallback(IAsyncResult ar)
        {
            Log("New client connected");

            // Signal the main thread to continue.
            allDone.Set();

            // Get the socket that handles the client request.
            Socket listener = (Socket)ar.AsyncState;
            Socket handler  = listener.EndAccept(ar);

            HS_SocketDataWorker sdw = new HS_SocketDataWorker(handler);

            sdw.SetCallback(new HS_SocketDataWorker.HS_PlayerCommandCallback(MessageReceived));
        }
예제 #8
0
 void GameConnectCallback(IAsyncResult ar)
 {
     try
     {
         Socket listener = (Socket)ar.AsyncState;
         listener.EndConnect(ar);
         HS_SocketDataWorker sdw = new HS_SocketDataWorker(listener);
         sdw.SetCallback(new HS_SocketDataWorker.HS_PlayerCommandCallback(GameMessageReceived));
         JsonDataMessage r = new JsonDataMessage("login", userid);
         sdw.Send(r.Json);
         Debug.Log("Sending data: " + r.Json);
     }
     catch (Exception e)
     {
         Debug.Log(e.ToString());
     }
 }
예제 #9
0
 public void LoginMessageReceived(HS_SocketDataWorker sdw, string message)
 {
     try{
         string MSG = TDESHandler.Decrypt(sym_key, message);
         Debug.Log("Message received: " + MSG);
         ServerResponse response = ServerResponse.Parse(MSG);
         msg    = response.Result;
         userid = response.Data1;
         //TODO close the socket
         //TODO check result with json
         GameServerLogin();
     }
     catch (Exception e)
     {
         Debug.Log(e.ToString());
     }
 }
예제 #10
0
    void LoginConnectCallback(IAsyncResult ar)
    {
        try
        {
            Socket listener = (Socket)ar.AsyncState;
            listener.EndConnect(ar);

            sym_key = GenerateSymKey();
            LoginRequest lr = new LoginRequest(username, password, sym_key);
            Debug.Log("Json: " + lr.Json);
            string e = RSAHandler.Encrypt(public_key, lr.Json);

            HS_SocketDataWorker sdw = new HS_SocketDataWorker(listener);
            sdw.SetCallback(new HS_SocketDataWorker.HS_PlayerCommandCallback(LoginMessageReceived));
            sdw.Send(e);
            Debug.Log("Sending data: " + e);
        }
        catch (Exception e)
        {
            Debug.Log(e.ToString());
        }
    }