コード例 #1
0
        void _slaveClient_GotGameUpdate(object sender, GameInstance.GameUpdateEventArgs e)
        {
            GamePlayer player = (GamePlayer)sender;

            if (e.Message == GameMessage.EndGame)
            {
                // the slaves can't end it
            }
            else if (e.Message == GameMessage.SetReady)
            {
                player.Device.Ready = true;
                player.SendUpdate(GameMessage.SetReadyResponse, new byte[0]);
                SendGameInfo();
            }
            else if (e.Message == GameMessage.PushState)
            {
                byte[] buffer = new byte[e.GameState.Length + 10];
                Encoding.ASCII.GetBytes("mobilesrc").CopyTo(buffer, 0);
                buffer[9] = 1;
                e.GameState.CopyTo(buffer, 10);

                //_masterClient.SendUpdate(GameMessage.NOP, new byte[1500]);
                _masterClient.SendUpdate(GameMessage.PushStateResponse, e.GameState);
            }
            else
            {
                // Send everything to the master
                // _masterClient.SendUpdate(e.Message, e.GameState);
            }
        }
コード例 #2
0
        void _masterClient_GotGameUpdate(object sender, GameInstance.GameUpdateEventArgs e)
        {
            GamePlayer player = (GamePlayer)sender;

            if (e.Message == GameMessage.EndGame)
            {
                Trace.WriteLine("Ending Game: " + player.Device.User);
                lock (_gameDb)
                {
                    Game.Completed = true;
                    _gameDb.SubmitChanges();
                }

                if (null != GameEnded)
                {
                    GameEnded(this, new EventArgs());
                }

                player.Close();
            }
            else if (e.Message == GameMessage.AcceptUser)
            {
                Int16  queryStringLength        = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(e.GameState, 0));
                string queryString              = System.Text.Encoding.ASCII.GetString(e.GameState, 2, queryStringLength);
                NameValueCollection queryBucket = System.Web.HttpUtility.ParseQueryString(queryString);

                string device = queryBucket["id"];

                foreach (GamePlayer slave in _slaveClients)
                {
                    if (string.Equals(slave.Device.Device, device, StringComparison.InvariantCultureIgnoreCase))
                    {
                        slave.Device.Accepted = true;
                        slave.SendUpdate(GameMessage.AcceptUserResponse, new byte[0]);

                        break;
                    }
                }

                SendGameInfo();
            }
            else if (e.Message == GameMessage.RejectUser)
            {
                Int16  queryStringLength        = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(e.GameState, 0));
                string queryString              = System.Text.Encoding.ASCII.GetString(e.GameState, 2, queryStringLength);
                NameValueCollection queryBucket = System.Web.HttpUtility.ParseQueryString(queryString);

                string device = queryBucket["id"];

                foreach (GamePlayer slave in _slaveClients)
                {
                    if (string.Equals(slave.Device.Device, device, StringComparison.InvariantCultureIgnoreCase))
                    {
                        slave.SendUpdate(GameMessage.RejectUserResponse, new byte[0]);
                        slave.Close();

                        _slaveClients.Remove(slave);

                        break;
                    }
                }

                SendGameInfo();
            }
            else if (e.Message == GameMessage.Start)
            {
                this.Game.Ready = true;
                SendGameInfo();

                Thread.Sleep(1500);
                player.SendUpdate(GameMessage.StartResponse, new byte[0]);
            }
            else if (e.Message == GameMessage.PushState)
            {
                //Int16 queryStringLength = System.Net.IPAddress.NetworkToHostOrder(BitConverter.ToInt16(e.GameState, 0));
                //string queryString = System.Text.Encoding.ASCII.GetString(e.GameState, 2, queryStringLength);
                //NameValueCollection queryBucket = System.Web.HttpUtility.ParseQueryString(queryString);

                //byte[] buffer = new byte[e.GameState.Length + 10];
                //Encoding.ASCII.GetBytes("mobilesrc").CopyTo(buffer, 0);
                //buffer[9] = 1;
                //e.GameState.CopyTo(buffer, 10);

                foreach (GamePlayer slave in _slaveClients)
                {
                    Console.WriteLine("_masterClient_GotGameUpdate: " + slave.Device.User);
                    //slave.SendUpdate(GameMessage.NOP, new byte[1500]);
                    try
                    {
                        slave.SendUpdate(GameMessage.PushStateResponse, e.GameState);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("ERROR _masterClient_GotGameUpdate");
                        Console.WriteLine(ex.ToString());
                    }
                }
            }
            else
            {
            }
        }