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(); } }
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(); } }