Пример #1
0
 static void ServerMatchingPlayer()
 {
     if (waitingList.Count >= 2)
     {
         int player1ThreadID, player2ThreadID;
         List <KeyValuePair <string, string> > cont = MatchPlayer(out player1ThreadID, out player2ThreadID);
         StreamWriter swPlayer1 = activeThread[player1ThreadID];
         StreamWriter swPlayer2 = activeThread[player2ThreadID];
         //Console.WriteLine(player1ThreadID + " " + player2ThreadID);
         ServerMessageHandler smsg = new ServerMessageHandler("MatchOpponentResponse", cont, swPlayer1, swPlayer2);
         smsg.ProcessServerMessage();
     }
 }
Пример #2
0
 static void ReceiveRequestFromClient()
 {
     while (true)
     {
         Socket soc = listener.AcceptSocket();
         Console.WriteLine("Connected: {0}", soc.RemoteEndPoint);
         try
         {
             object       locker = new object();
             Stream       s      = new NetworkStream(soc);
             StreamReader sr     = new StreamReader(s);
             StreamWriter sw     = new StreamWriter(s);
             sw.AutoFlush = true;
             lock (locker) {
                 activeThread.Add(Thread.CurrentThread.ManagedThreadId, sw);
             }
             //Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
             while (soc.Connected)
             {
                 string recv = "";
                 while (soc.Connected)
                 {
                     string temp = sr.ReadLine();
                     if (temp == "$" || temp == "" || temp == null)
                     {
                         break;
                     }
                     else
                     {
                         recv += temp;
                     }
                 }
                 Console.WriteLine("Receive: " + recv);
                 JsonParser           parser = new JsonParser(recv);
                 ClientMessageHandler msg    = new ClientMessageHandler(parser.Parse(), sw);
                 ServerMessageHandler smsg   = msg.ProcessClientMessage();
                 smsg.ProcessServerMessage();
             }
         }
         catch { }
         Console.WriteLine("Disconnected: {0}", soc.RemoteEndPoint);
         lock (locker)
         {
             try
             {
                 activeThread.Remove(Thread.CurrentThread.ManagedThreadId);
                 var playerName = playerNameList.FirstOrDefault(x => x.Value == Thread.CurrentThread.ManagedThreadId).Key;
                 if (playerName != null)
                 {
                     playerNameList.Remove(playerName);
                     playerPriority.Remove(playerName);
                     if (waitingList.ContainsKey(playerName))
                     {
                         waitingList.Remove(playerName);
                     }
                     if (playerGameStateIdMapping.ContainsKey(playerName))
                     {
                         int gameStateIdMapping = playerGameStateIdMapping[playerName];
                         playerGameStateIdMapping.Remove(playerName);
                         if (activeGameState.ContainsKey(gameStateIdMapping))
                         {
                             GameStateManager gameStateManager = activeGameState[gameStateIdMapping];
                             string           opponentPlayerName;
                             if (gameStateManager.player1.playerName == playerName)
                             {
                                 gameStateManager.player1.isOnline = false;
                                 opponentPlayerName = gameStateManager.player2.playerName;
                             }
                             else
                             {
                                 gameStateManager.player2.isOnline = false;
                                 opponentPlayerName = gameStateManager.player1.playerName;
                             }
                             if (playerNameList.ContainsKey(opponentPlayerName))
                             {
                                 int                  opponentThreadId = playerNameList[opponentPlayerName];
                                 StreamWriter         targetSW         = activeThread[opponentThreadId];
                                 ServerMessageHandler smsg             = new ServerMessageHandler();
                                 smsg.header     = "Crashed";
                                 smsg.swReceiver = targetSW;
                                 smsg.ProcessServerMessage();
                             }
                         }
                     }
                 }
             }
             catch (Exception e)
             {
                 Console.WriteLine(e.ToString());
             }
         }
         soc.Close();
     }
 }