public void Start()
        {
            Console.WriteLine("QuickPlay session started: " + roomName);

            UserImageData _image = JsonConvert.DeserializeObject <UserImageData>(SqlConnection.GetUserImage(player_2.login));

            QuickPlaySessionInfo _temp = new QuickPlaySessionInfo
            {
                roomName          = roomName,
                roomId            = roomId,
                firstPlayer       = true,
                opponentName      = player_2.login,
                opponentRating    = player_2.rating,
                myCharNames       = new string[] { player_1.mainTeamNames[0], player_1.mainTeamNames[1], player_1.mainTeamNames[2] },
                myCharIds         = new string[] { player_1.mainTeam[0].id, player_1.mainTeam[1].id, player_1.mainTeam[2].id },
                opponentCharNames = new string[] { player_2.mainTeamNames[0], player_2.mainTeamNames[1], player_2.mainTeamNames[2] },
                opponentCharIds   = new string[] { player_2.mainTeam[0].id, player_2.mainTeam[1].id, player_2.mainTeam[2].id },
                enemyImage        = _image.b64str,
                enemyImageScale   = _image.scale
            };

            ServerTCP.Send_QuickPlaySessionInfo(ServerTCP.OnlineClients[player_1.login], JsonConvert.SerializeObject(_temp));

            _image = JsonConvert.DeserializeObject <UserImageData>(SqlConnection.GetUserImage(player_1.login));

            _temp.firstPlayer       = false;
            _temp.opponentName      = player_1.login;
            _temp.opponentRating    = player_1.rating;
            _temp.opponentCharNames = new string[] { player_1.mainTeamNames[0], player_1.mainTeamNames[1], player_1.mainTeamNames[2] };
            _temp.opponentCharIds   = new string[] { player_1.mainTeam[0].id, player_1.mainTeam[1].id, player_1.mainTeam[2].id };
            _temp.myCharNames       = new string[] { player_2.mainTeamNames[0], player_2.mainTeamNames[1], player_2.mainTeamNames[2] };
            _temp.myCharIds         = new string[] { player_2.mainTeam[0].id, player_2.mainTeam[1].id, player_2.mainTeam[2].id };
            _temp.enemyImage        = _image.b64str;
            _temp.enemyImageScale   = _image.scale;

            ServerTCP.Send_QuickPlaySessionInfo(ServerTCP.OnlineClients[player_2.login], JsonConvert.SerializeObject(_temp));

            plyer_1_chars = new string[] { player_1.mainTeam[0].id, player_1.mainTeam[1].id, player_1.mainTeam[2].id };
            plyer_2_chars = new string[] { player_2.mainTeam[0].id, player_2.mainTeam[1].id, player_2.mainTeam[2].id };

            foreach (KeyValuePair <string, UserChar> playerChar in PlayerChars)
            {
                playerChar.Value.SetBaseValues();
                playerChar.Value.turnmeter = playerChar.Value.speed / 10;
            }
            CalculateTurns();
        }
        private static void Handle_RequestUserLogin(int index, byte[] data)
        {
            PacketBuffer buffer = new PacketBuffer();

            buffer.WriteBytes(data);
            int    packetNum = buffer.ReadInteger();
            string msg       = buffer.ReadString();

            buffer.Dispose();

            //Json parse
            UserLoginData userData = JsonConvert.DeserializeObject <UserLoginData>(msg);

            //add your code you want to execute here;
            Console.WriteLine(index + " : Requested login ({0}, {1})", userData.login, userData.password);

            UserSession userSession = SqlConnection.InitialazeUserSession(userData.login);

            if (SqlConnection.LoginUser(userData.login, userData.password))
            {
                Console.WriteLine(index + ": Logined in as " + userData.login);

                userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession);
                userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession);
                userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession);

                string json = JsonConvert.SerializeObject(userSession);
                try
                {
                    ServerTCP.OnlineClients.Add(userSession.login, index);
                }
                catch
                {
                    ServerTCP.OnlineClients.Remove(userSession.login);
                    ServerTCP.OnlineClients.Add(userSession.login, index);
                }
                ServerTCP.Send_ConfirmUserLogin(index, json);
                ServerTCP.Send_UpdateUserImage(index, SqlConnection.GetUserImage(userSession.login));
            }
            else
            {
                Console.WriteLine(index + ": Login was aborted");
                ServerTCP.Send_AbortUserLogin(index);
            }
        }
        private static void Handle_RequestUserAccountDataUpdate(int index, byte[] data)
        {
            PacketBuffer buffer = new PacketBuffer();

            buffer.WriteBytes(data);
            int    packetNum = buffer.ReadInteger();
            string msg       = buffer.ReadString();

            buffer.Dispose();

            //Json parse
            UserSession userSession = SqlConnection.InitialazeUserSession(msg);

            userSession.mainTeam[0] = SqlConnection.LoadUserChar(userSession.mainTeamNames[0], userSession);
            userSession.mainTeam[1] = SqlConnection.LoadUserChar(userSession.mainTeamNames[1], userSession);
            userSession.mainTeam[2] = SqlConnection.LoadUserChar(userSession.mainTeamNames[2], userSession);
            ServerTCP.Send_UpdateUserSessionData(index, JsonConvert.SerializeObject(userSession));

            ServerTCP.Send_UpdateUserImage(index, SqlConnection.GetUserImage(userSession.login));
        }
        private void StartNewMove(string currentChar)
        {
            QuickPlaySessionData moveData = new QuickPlaySessionData
            {
                roomName = roomName,
                roomId   = roomId,
                gameOver = gameOver,
                winner   = winner
            };

            moveData.moveInfo = new MoveInfo
            {
                skillCount = PlayerChars[currentChar].skillCount,
                classID    = currentChar.Substring(8)
            };

            Console.WriteLine("Starting Move: " + currentChar);
            foreach (KeyValuePair <string, UserChar> playerChar in PlayerChars)
            {
                Console.WriteLine(string.Format("({0}): {1} | health: {2}, speed: {3}, turnmeter: {4}", playerChar.Value.id, playerChar.Value.name, playerChar.Value.health, playerChar.Value.speed, playerChar.Value.turnmeter));
                float scaler = ((float)playerChar.Value.health / (float)playerChar.Value.Health) * 100.0F;

                Console.Write("|");
                Console.ForegroundColor = ConsoleColor.Green;
                for (int i = 100; i > 0; i--)
                {
                    if ((int)scaler > 0)
                    {
                        Console.Write('\u25A0');
                    }
                    else
                    {
                        Console.Write('_');
                    }
                    scaler--;
                }
                Console.ResetColor();
                Console.Write("|\n");
                Console.Write("|");
                Console.ForegroundColor = ConsoleColor.Blue;
                scaler = playerChar.Value.turnmeter;
                for (int i = 100; i > 0; i--)
                {
                    if ((int)scaler > 0)
                    {
                        Console.Write('\u25A0');
                    }
                    else
                    {
                        Console.Write('_');
                    }
                    scaler--;
                }
                Console.ResetColor();
                Console.Write("|\n");

                moveData.HealthData.Add(((float)playerChar.Value.health / (float)playerChar.Value.Health) * 100.0F);
                moveData.TurnMeterData.Add(playerChar.Value.turnmeter);

                waitingForMove = true;
            }

            moveData.currentCharId = currentChar;
            moveData.moveLogs      = moveLogs;
            moveLogs.Clear();
            ServerTCP.Send_QuickPlaySessionData(ServerTCP.OnlineClients[player_1.login], JsonConvert.SerializeObject(moveData));
            ServerTCP.Send_QuickPlaySessionData(ServerTCP.OnlineClients[player_2.login], JsonConvert.SerializeObject(moveData));
        }