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