Ejemplo n.º 1
0
        /// <summary>
        /// that function is check if pear of client playing.
        /// </summary>
        public bool StillPlayingTogether(string userName, string opponentUserName)
        {
            if (_liveClients.ContainsKey(opponentUserName) && _liveClients[opponentUserName])
            {
                var a = _playingClients.Contains(Tuple.Create(userName, opponentUserName));
                var b = _playingClients.Contains(Tuple.Create(opponentUserName, userName));

                if (a || b)
                {
                    var thread = new Thread(() =>
                    {
                        _clients[opponentUserName].InformOpponentDisconnect();
                    });
                    thread.Start();
                }

                return(a || b);
            }

            var opponentDisconnected = new OpponentDisconnectedFault
            {
                Details = "User name: " + opponentUserName + " Disconnected From The Waiting Room!"
            };

            throw new FaultException <OpponentDisconnectedFault>(opponentDisconnected);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// that function is call after client that invited reply to the invite.
        /// </summary>
        public void ReplyToInviteOtherPlayer(string fromUserName, string toUserName, bool reply)
        {
            if (_liveClients.ContainsKey(toUserName) && _liveClients[toUserName])
            {
                if (!reply)
                {
                    _invitedClients[toUserName]   = false;
                    _invitedClients[fromUserName] = false;
                }
                var thread = new Thread(() =>
                {
                    _clients[toUserName].ReplyDidYouWantToPlay(fromUserName, reply);
                });

                thread.Start();
            }
            else
            {
                var opponentDisconnected = new OpponentDisconnectedFault
                {
                    Details = "User name: " + toUserName + " Disconnected From The Waiting Room, Wait For Other Invite Or Invite User."
                };
                throw new FaultException <OpponentDisconnectedFault>(opponentDisconnected);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// that function is call after client invite other client to play.
        /// </summary>
        public void InviteOtherPlayer(string fromUserName, string toUserName)
        {
            if (_liveClients.ContainsKey(toUserName) && _liveClients[toUserName])
            {
                _invitedClients[toUserName]   = true;
                _invitedClients[fromUserName] = true;

                var thread = new Thread(() =>
                {
                    _clients[toUserName].DidYouWantToPlay(fromUserName);
                });

                thread.Start();
            }
            else
            {
                var opponentDisconnected = new OpponentDisconnectedFault
                {
                    Details = "User name: " + toUserName + " Disconnected From The Waiting Room, Try Other One!"
                };
                throw new FaultException <OpponentDisconnectedFault>(opponentDisconnected);
            }
        }
Ejemplo n.º 4
0
 /// <summary>
 /// that function is happened after every step at the game, also send the last score of the user.
 /// </summary>
 public void ReportMove(string fromUserName, Move move, string toUserName, MoveResult moveResult, int score)
 {
     try
     {
         if (_clients.ContainsKey(toUserName) &&
             (_playingClients.Contains(Tuple.Create(fromUserName, toUserName)) || _playingClients.Contains(Tuple.Create(toUserName, fromUserName))))
         {
             Thread updateOtherPlayerMoveThread = new Thread(() =>
             {
                 _clients[toUserName].OtherPlayerReportMove(move, moveResult, score);
             }
                                                             );
             updateOtherPlayerMoveThread.Start();
         }
         else
         {
             EndGame(fromUserName, 1000, toUserName, 0);
             var opponentDisconnected = new OpponentDisconnectedFault
             {
                 Details = ": " + toUserName + " Disconnected From The Game!\n" + "You Automatically Win!!!"
             };
             throw new FaultException <OpponentDisconnectedFault>(opponentDisconnected);
         }
     }
     catch (FaultException <OpponentDisconnectedFault> fault)
     {
         throw fault;
     }
     catch (Exception ex)
     {
         var exceptionFault = new ExceptionFault()
         {
             Details = ex.Message + "\n" + "Type: " + ex.GetType()
         };
         throw new FaultException <ExceptionFault>(exceptionFault);
     }
 }