/// <summary>
        ///
        /// </summary>
        public override void Execute()
        {
            IPEndPoint remoteEp = myConversation.FirstEnvelope.remoteEndPoint;
            MessageId  convId   = myConversation.FirstEnvelope.message.convId;
            short      gameId   = ((StartGameMessage)myConversation.FirstEnvelope.message).GameId;

            Envelope envelope = new Envelope(new AckMessage(convId, gameId), remoteEp);

            UserInfo      userInfo  = ((UserAppWorker)myConversation.commFacility.myAppWorker).UserInfo;
            UserAppWorker appWorker = (UserAppWorker)myConversation.commFacility.myAppWorker;

            if (ReceivedGameState?.CurrentPlayerId == userInfo.PlayerId)
            {
                Envelope receivedEnvelope = SendAndReceiveMessage(envelope);

                if (receivedEnvelope?.message != null)
                {
                    appWorker.UserInfo.AcceptUserInput = true;
                }
                else
                {
                    // TODO: Throw Error, no Start Ack Message received
                }
            }
            else
            {
                // TODO: Handle what happens if this ack is not received and so another GameUpdateStateMessage was received
                SendMessage(envelope);
            }

            myConversation.Stop();
        }
        /// <summary>
        /// Assigns received game info data to the UserAppWorker's user info
        /// </summary>
        /// <param name="gMessage">GameStateUpdateMessage received</param>
        private void SetUserInfo(GameStateUpdateMessage gMessage)
        {
            UserAppWorker userAppWorker = (UserAppWorker)myConversation.commFacility.myAppWorker;

            userAppWorker.UserInfo.GameId            = gMessage.GameId;
            userAppWorker.UserInfo.CurrentPlayerId   = gMessage.CurrentPlayerId;
            userAppWorker.UserInfo.PlayerPoints      = gMessage.PlayerPoints;
            userAppWorker.UserInfo.PlayerCardAmounts = gMessage.PlayerCardsAmounts;
            userAppWorker.UserInfo.BoardLayout       = gMessage.BoardLayout;
            userAppWorker.UserInfo.PlayerWithLR      = gMessage.PlayerWithLR;
            userAppWorker.UserInfo.LastMove          = gMessage.LastMove;
        }
 public StartUpState(UserAppWorker appWorker)
     : base(appWorker)
 {
 }
Example #4
0
        static void Main(string[] args)
        {
            UserAppWorker appWorker = new UserAppWorker();

            appWorker.Start();
        }