public void OwnerListen(Client OwnerFun) { while (OwnerThreadFlag) { if (OwnerFun.Stream.DataAvailable) { //int RoomId; string[] ClientMsg = OwnerFun.Br.ReadString().Split(','); bool flag = true; switch (ClientMsg[0]) { case "1": Opponent.Bw.Write("letter," + ClientMsg[1]); PlayingNow = ClientMsg[2]; CurrentWord = ClientMsg[3]; History.Append(ClientMsg[1] + ","); foreach (Client watcher in Watchers.Values) { // watcher.ThreadClient.Suspend(); watcher.Bw.Write("1," + ClientMsg[1] + "," + PlayingNow + "," + CurrentWord); //watcher.ThreadClient.Resume(); } break; case "2": if (PlayingNow == "OwnerPlaying") { ownerCount++; } else { OpponentCount++; } while (flag) { if (OpponentReplyFlag != null) { SelectedWord(); flag = false; History.Clear(); if ((bool)OpponentReplyFlag) { Opponent.Bw.Write("2accepted," + Word); Owner.Bw.Write("2accepted," + Word); } else { Score(); Owner.Bw.Write("1accepted," + Word); Opponent = null; NumOfPlayers = 1; Join = true; OwnerThreadFlag = false; Owner.ThreadClient.Resume(); } OpponentReplyFlag = null; } } break; case "3": if (PlayingNow == "OwnerPlaying") { ownerCount++; } else { OpponentCount++; } Score(); Owner.ThreadClient.Resume(); NumOfPlayers = 1; Join = true; History.Clear(); while (flag) { if (OpponentReplyFlag != null) { flag = false; if ((bool)OpponentReplyFlag) { OpponentThreadFlag = false; OwnerThreadFlag = false; SelectedWord(); Opponent.Bw.Write("Opponentaccepted," + Word); // Owner.ThreadClient.Resume(); Opponent.ThreadClient.Resume(); Owner = Opponent; Opponent = null; NumOfPlayers = 1; Join = true; } else { Rooms.Remove(Id); OwnerThreadFlag = false; } } } OpponentReplyFlag = null; break; case "4": OpponentCount++; Score(); foreach (Client watcher in Watchers.Values) { watcher.Bw.Write("2," + Owner.Name + " leave the room"); } SelectedWord(); OpponentThreadFlag = false; OwnerThreadFlag = false; Opponent.Bw.Write("Ownerleave," + Word); Opponent.ThreadClient.Resume(); Owner.ThreadClient.Resume(); Owner = Opponent; Opponent = null; NumOfPlayers = 1; Join = true; History.Clear(); //Rooms.Remove(Id); break; } } } }
void OnRoomEmpty(object sender, Room e) { e.OnEmpty -= OnRoomEmpty; Rooms.Remove(e); }