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