/// <summary> /// Disconnects from the server /// </summary> /// <param name="reason">Reason disconnection occurs</param> private void Disconnect(DisconnectReasonInside reason) { lock (this) { if (state != NetworkState.gameOver) { state = NetworkState.gameOver; if (Disconnected != null) { Disconnected(reason); } } } }
/// <summary> /// Handles the Disconnected event from the Connect4Client. /// </summary> /// <param name="dr">the reason for disconnecting</param> private void DisconnectedHandler(DisconnectReasonInside dr) { if (Disconnected != null) { // only initialized to make compiler happy DisconnectReason reason = DisconnectReason.serverDisconnected; switch (dr) { case DisconnectReasonInside.blackOutOfTime: reason = (isBlack) ? DisconnectReason.youOutOfTime : DisconnectReason.opponentOutOfTime; break; case DisconnectReasonInside.blackResigned: reason = (isBlack) ? DisconnectReason.youResigned : DisconnectReason.opponentResigned; break; case DisconnectReasonInside.blackWon: reason = (isBlack) ? DisconnectReason.youWon : DisconnectReason.opponentWon; break; case DisconnectReasonInside.draw: reason = DisconnectReason.draw; break; case DisconnectReasonInside.opponentDisconnected: reason = DisconnectReason.opponentDisconnected; break; case DisconnectReasonInside.serverDisconnected: reason = DisconnectReason.serverDisconnected; break; case DisconnectReasonInside.whiteOutOfTime: reason = (isBlack) ? DisconnectReason.opponentOutOfTime : DisconnectReason.youOutOfTime; break; case DisconnectReasonInside.whiteResigned: reason = (isBlack) ? DisconnectReason.opponentResigned : DisconnectReason.youResigned; break; case DisconnectReasonInside.whiteWon: reason = (isBlack) ? DisconnectReason.opponentWon : DisconnectReason.youWon; break; case DisconnectReasonInside.youLeft: reason = DisconnectReason.youLeft; break; default: break; } Task.Factory.StartNew(() => Disconnected(reason)); } }