Ejemplo n.º 1
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
 void OnRoomEmpty(object sender, Room e)
 {
     e.OnEmpty -= OnRoomEmpty;
     Rooms.Remove(e);
 }