Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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;
        }
    }
Exemplo n.º 4
0
    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;
        }
    }