public void SendStateToController() { ServerMessage message = new ServerMessage(ServerMessageType.UpdateState); //message.AddContent(DeviceName); message.AddContent(Health); message.AddContent(Shield); message.AddContent(BatteryVoltage); message.AddContent((byte)Weapons.Count); foreach (SpheroWeapon weapon in Weapons) { message.AddContent((byte)weapon.Type); } message.AddContent((byte)PowerUps.Count); foreach (SpheroPowerUp powerup in PowerUps) { message.AddContent((byte)powerup.Type); } //message.Target = ControllerTarget; //Server.Send(message); byte[] data = BitConverter.GetBytes(Health); for (int i = 0; i < data.Length; ++i) { Debug.LogFormat("Health: {0:x2}", data[i]); } Connection.Send(message); }
public void SendStateToController() { ServerMessage message = new ServerMessage(ServerMessageType.UpdateState); //message.AddContent(DeviceName); message.AddContent(Health); message.AddContent(Shield); message.AddContent(BatteryVoltage); message.AddContent((byte)Weapons.Count); foreach (SpheroWeapon weapon in Weapons) message.AddContent((byte)weapon.Type); message.AddContent((byte)PowerUps.Count); foreach (SpheroPowerUp powerup in PowerUps) message.AddContent((byte)powerup.Type); //message.Target = ControllerTarget; //Server.Send(message); byte[] data = BitConverter.GetBytes(Health); for (int i = 0; i < data.Length; ++i) Debug.LogFormat("Health: {0:x2}", data[i]); Connection.Send(message); }
private static void ProcessReceivedBytes(byte[] bytes, IPEndPoint receivedFrom) { string prefix = string.Format("[Server] {0} - ", receivedFrom.ToString()); if (!Enum.IsDefined(typeof(ServerMessageType), (int)bytes[0])) { Debug.LogFormat("{0} Unknown (0x{1:x2}).", prefix, bytes[0]); return; } ServerMessage message = new ServerMessage(); ServerMessageType type = (ServerMessageType)bytes[0]; // Debug.LogFormat("{0} {1} (0x{2:x2}).", prefix, type.ToString(), bytes[0]); ++receivedFrom.Port; // TODO might have to find a better way to do this. switch (type) { case ServerMessageType.Test: break; case ServerMessageType.RemoveSphero: break; case ServerMessageType.SetEndianness: message.Type = ServerMessageType.SetEndianness; message.Target = receivedFrom; message.AddContent(BitConverter.IsLittleEndian); Send(message); break; case ServerMessageType.UpdateState: // Parse state, assumed to be received from Node.js server. SpheroManager.ParseUpdatedState(bytes, 1); break; case ServerMessageType.RollSphero: SpheroManager.Roll(bytes); break; case ServerMessageType.ServerDiscover: message.Type = ServerMessageType.ServerDiscover; message.Target = receivedFrom; message.AddContent(Name); Send(message); break; case ServerMessageType.SpheroShoot: SpheroManager.Shoot(bytes); break; case ServerMessageType.SpheroPowerUp: SpheroManager.UsePowerUp(bytes); break; case ServerMessageType.PauseGame: break; case ServerMessageType.NodeInit: // When node identifies itself, send the endianness. NodeServerTarget = receivedFrom; message.Type = ServerMessageType.SetEndianness; message.Target = NodeServerTarget; message.AddContent(BitConverter.IsLittleEndian); Send(message); break; case ServerMessageType.AppInit: /*Sphero sphero = null; * * message.Type = ServerMessageType.AppInit; * message.Target = receivedFrom; * message.AddContent(BitConverter.IsLittleEndian); * * if (BitConverter.ToBoolean(bytes, 1) && ((sphero = SpheroManager.GetNextSphero()) != null)) * { * message.AddContent(sphero.DeviceName); * } * else * { * message.AddContent(SpheroManager.SpectatorName); * SpectatorManager.Instances.Add(new Spectator(receivedFrom)); * } * * Send(message); * * if (sphero != null) * { * sphero.ControllerTarget = receivedFrom; * sphero.HasController = true; * sphero.SendStateToController(); * }*/ break; } }
private void ProcessStreamedData(int type) { if (!Enum.IsDefined(typeof(ServerMessageType), type)) { Debug.LogFormat("Uknown type 0x{0:x2}.", type); return; } ServerMessageType messageType = (ServerMessageType)type; Debug.LogFormat("0x{0:x2}.", type); ServerMessage message = new ServerMessage(); switch (messageType) { case ServerMessageType.SpheroShoot: ReadStreamedBytes(6); ReadStreamedBytes(buffer[5], 6); SpheroManager.Shoot(buffer); break; case ServerMessageType.RollSphero: ReadStreamedBytes(9); ReadStreamedBytes(buffer[8], 9); SpheroManager.Roll(buffer); break; case ServerMessageType.SpheroPowerUp: ReadStreamedBytes(2); ReadStreamedBytes(buffer[1], 2); SpheroManager.UsePowerUp(buffer); break; case ServerMessageType.AppInit: ReadStreamedBytes(1); Sphero sphero = null; message.Type = ServerMessageType.AppInit; message.AddContent(BitConverter.IsLittleEndian); if (BitConverter.ToBoolean(buffer, 0) && ((sphero = SpheroManager.GetNextSphero()) != null)) { message.AddContent(sphero.DeviceName); } else { message.AddContent(SpheroManager.SpectatorName); //SpectatorManager.Instances.Add(new Spectator(receivedFrom)); } Send(message); if (sphero != null) { sphero.HasController = true; sphero.Connection = this; Debug.LogFormat("Health: {0}", sphero.Health); sphero.SendStateToController(); } break; case ServerMessageType.RemoveSphero: ReadStreamedBytes(1); ReadStreamedBytes(buffer[0], 1); Close(); // SpheroManager.RemoveSphero(buffer); // Server.TcpConnections.Remove(this); break; default: break; } }