示例#1
0
 void WorldEntityPacketReceived(WorldEntityPacket packet)
 {
     //todo: verify movement
     Position = packet.position.Get();
     Rotation = packet.rotation.Get();
     IsDirty  = true;
 }
示例#2
0
 private void OnWorldEntityPacket(WorldEntityPacket packet)
 {
     moves.Enqueue(
         new MovementUpdate(
             packet.position.Get(),
             Quaternion.Euler(packet.rotation.Get()),
             DateTime.UtcNow.ToUnixMilliseconds()));
 }
示例#3
0
        public void SendPositionInfo()
        {
            WorldEntityPacket wep = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);

            wep.rotation.Set(rotation);
            wep.position.Set(position);
            wep.entityId = entityId;
            testClient.Send(wep);
        }
示例#4
0
    public virtual void SendPositionAndRotationData(ServerPlayer destPlayer)
    {
        WorldEntityPacket packet = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);

        packet.entityId = EntityId;
        packet.position.Set(Position);
        packet.rotation.Set(Rotation);

        Server.Send(packet, destPlayer.EntityId.SingleItemAsEnumerable());
    }
示例#5
0
    public override void SendPositionAndRotationData(ServerPlayer destPlayer)
    {
        WorldEntityPacket liveEntityPosition = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);

        liveEntityPosition.entityId = EntityId;
        liveEntityPosition.position.Set(Position);
        liveEntityPosition.rotation.Set(Rotation);

        Server.Send(liveEntityPosition, destPlayer.EntityId.SingleItemAsEnumerable());
    }
示例#6
0
        private static void Main(string[] args)
        {
            CommonLibrary.Parser.ParseCommandLine(args);
            long applicationId = CommonLibrary.Parser.ApplicationId;

            if (applicationId == 0)
            {
                applicationId = Network.Utils.GetIPBasedApplicationId();
            }
            float  sleepTime = 1000.0f / (float)CommonLibrary.Parser.FPS;
            string ipAddr    = CommonLibrary.Parser.ipAddr;

            Console.WriteLine("Game server talking to Gateway.");
            //Console.WriteLine("  Press L to login (auto login is set).");
            Console.WriteLine("  Press P to update player position.");
            Console.WriteLine("  ** application id = {0} **", applicationId);
            Console.WriteLine("  Press esc to update player position.\n\n");

            ushort port = 11004;
            TestGameServerController testServer = new TestGameServerController(ipAddr, port, applicationId);

            //testServer.Star
            //testServer.
            // open  socket to connect to the gateway
            // upon connect, send ServerIdPacket:Game to connected
            // receive ServerIdPacket:Gateway
            // upon disconnect, reconnect

            ConsoleKey key;

            do
            {
                while (!Console.KeyAvailable)
                {
                    Thread.Sleep(20);
                }
                key = Console.ReadKey(true).Key;

                if (key == ConsoleKey.P)
                {
                    WorldEntityPacket we = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                    we.entityId = 1024;
                    we.position.Set(new Vector3(10, 20, 30));
                    we.rotation.Set(new Vector3(10, 20, 30));

                    testServer.Send(we);
                    Console.WriteLine("position sent.");
                }
            } while (key != ConsoleKey.Escape);

            testServer.Close();
        }
示例#7
0
    void OnTick()
    {
        if (positionalTracker.Passes(transform.position, transform.rotation) == true)
        {
            WorldEntityPacket packet = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);

            packet.entityId = EntityId;
            packet.position.Set(transform.position);
            packet.rotation.Set(transform.rotation.eulerAngles);

            Client.Send(packet);
            positionalTracker.Set(transform.position, transform.rotation);
        }
    }
        void HandlePlayerPackets(BasePacket packet)
        {
            if (packet.PacketType == PacketType.ServerConnectionHeader)
            {
                ServerConnectionHeader sch = packet as ServerConnectionHeader;
                if (sch != null)
                {
                    nextConnectionId = sch.connectionId;
                    return;
                }
            }
            if (packet.PacketType == PacketType.PlayerSaveState)
            {
                HandlePlayerSaveState(packet as PlayerSaveStatePacket);
                return;
            }
            if (packet.PacketType == PacketType.WorldEntity)
            {
                WorldEntityPacket wep = packet as WorldEntityPacket;
                if (wep != null)
                {
                    foreach (var playerId in playerIds)
                    {
                        if (playerId.entityId == wep.entityId)
                        {
                            playerId.Set(wep.position.Get(), wep.rotation.Get());

                            //SendAllEntityPositions();
                        }
                    }
                    return;
                }
            }
            if (packet.PacketType == PacketType.RenderSettings)
            {
                RenderSettings rs = packet as RenderSettings;
                if (rs != null)
                {
                    foreach (var playerId in playerIds)
                    {
                        if (playerId.entityId == nextConnectionId)
                        {
                            playerId.settings = rs;
                        }
                    }
                    return;
                }
            }
        }
        void SendAllEntityPositions()
        {
            foreach (var playerId in playerIds)
            {
                if (playerId.connectionId != 0)
                {
                    foreach (var destPlayerId in playerIds) // n^2
                    {
                        //if (playerId.connectionId != destPlayerId.connectionId)
                        {
                            ServerConnectionHeader gatewayHeader = (ServerConnectionHeader)IntrepidSerialize.TakeFromPool(PacketType.ServerConnectionHeader);
                            gatewayHeader.connectionId = destPlayerId.connectionId;

                            WorldEntityPacket entityNotification = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                            entityNotification.entityId = playerId.entityId;
                            entityNotification.position.Set(playerId.position);
                            entityNotification.rotation.Set(playerId.rotation);
                            socket.Send(gatewayHeader);
                            socket.Send(entityNotification);
                        }
                    }
                }
            }
        }
示例#10
0
 public MovementUpdate(WorldEntityPacket packet, DateTime timestamp)
 {
     Position  = packet.position.Get();
     Rotation  = Quaternion.Euler(packet.rotation.Get());
     Timestamp = timestamp.ToUnixMilliseconds();
 }
示例#11
0
        private static void Main(string[] args)
        {
            CommonLibrary.Parser.ParseCommandLine(args);
            Int64 applicationId = 1234;/*CommonLibrary.Parser.ApplicationId;
                                        * if (applicationId == 0)
                                        * {
                                        * applicationId = Network.Utils.GetIPBasedApplicationId();
                                        * }*/
            float  sleepTime    = 1000.0f / (float)CommonLibrary.Parser.FPS;
            string ipAddr       = CommonLibrary.Parser.ipAddr;

            //ipAddr = "192.168.30.214";
            ipAddr = "192.168.0.28";

            Console.WriteLine("Client talking to Server.");
            Console.WriteLine("  Press L to login (auto login is set).");
            Console.WriteLine("  Press P to update player position.");
            Console.WriteLine("  Press K to change to main player position.");
            Console.WriteLine("  ** application id = {0} **", applicationId);
            Console.WriteLine("  Press esc to update player position.\n\n");
            ushort port = 11000;

            Testing.ClientController testClient = new Testing.ClientController(ipAddr, port, applicationId);
            testClient.OnImageReceived += ImageReceived;

            ConsoleKey key;

            do
            {
                while (!Console.KeyAvailable)
                {
                    Thread.Sleep(20);
                    testClient.Update();
                }
                key = Console.ReadKey(true).Key;
                if (key == ConsoleKey.L)
                {
                    LoginCredentials cred = (LoginCredentials)IntrepidSerialize.TakeFromPool(PacketType.LoginCredentials);
                    cred.password.Copy("password");
                    cred.playerName.Copy("mickey");
                    testClient.Send(cred);
                    Console.WriteLine("login sent.");
                }
                if (key == ConsoleKey.D4)
                {
                    RenderSettings settings = (RenderSettings)IntrepidSerialize.TakeFromPool(PacketType.RenderSettings);
                    settings.screenWidth  = 1280;
                    settings.screenHeight = 720;
                    settings.screenFormat = RenderSettings.RenderFormat.RGBA;
                    settings.maxFPS       = 20;

                    testClient.Send(settings);
                    Console.WriteLine("settings sent.");
                }
                if (key == ConsoleKey.D5)
                {
                    RenderSettings settings = (RenderSettings)IntrepidSerialize.TakeFromPool(PacketType.RenderSettings);
                    settings.screenWidth  = 1280;
                    settings.screenHeight = 720;
                    settings.screenFormat = RenderSettings.RenderFormat.RGBA;
                    settings.maxFPS       = 4;

                    testClient.Send(settings);
                    Console.WriteLine("settings sent.");
                }
                if (key == ConsoleKey.D6)
                {
                    RenderSettings settings = (RenderSettings)IntrepidSerialize.TakeFromPool(PacketType.RenderSettings);
                    settings.screenWidth  = 1280;
                    settings.screenHeight = 720;
                    settings.screenFormat = RenderSettings.RenderFormat.RGBA;
                    settings.maxFPS       = -1;

                    testClient.Send(settings);
                    Console.WriteLine("settings sent.");
                }

                if (key == ConsoleKey.P)
                {
                    WorldEntityPacket we = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                    we.entityId = 1024;
                    we.position.Set(new Vector3(10, 20, 30));
                    we.rotation.Set(new Vector3(10, 20, 30));

                    testClient.Send(we);
                    Console.WriteLine("position sent.");
                }
                if (key == ConsoleKey.K)
                {
                    WorldEntityPacket we = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                    we.entityId = 1024;
                    we.position.Set(new Vector3(44, 0.20f, 21));
                    we.rotation.Set(new Vector3(5, 25, 30));

                    testClient.Send(we);
                    Console.WriteLine("position sent.");
                }
                if (key == ConsoleKey.M)
                {
                    Console.WriteLine("Major list of crap to send");
                    var test = new Packets.TestPacket();
                    Packets.TestDataBlob blob1 = new Packets.TestDataBlob(1, 2);
                    Packets.TestDataBlob blob2 = new Packets.TestDataBlob(3, 4);
                    Packets.TestDataBlob blob3 = new Packets.TestDataBlob(5, 6);
                    test.listOfBlobs.listOfSerializableItems.Add(blob1);
                    test.listOfBlobs.listOfSerializableItems.Add(blob2);
                    test.listOfBlobs.listOfSerializableItems.Add(blob3);
                    testClient.Send(test);
                }
                if (key == ConsoleKey.T)
                {
                    Console.WriteLine("Setting up the hopper");
                    ServerPingHopperPacket hopper = (ServerPingHopperPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerPingHopper);
                    hopper.Stamp("client start");
                    testClient.Send(hopper);
                }
                if (key == ConsoleKey.B)
                {
                    Console.WriteLine("Sending blob");

                    //DataBlob blob = new DataBlob();
                    DataBlob blob = (DataBlob)IntrepidSerialize.TakeFromPool(PacketType.DataBlob);

                    int    size = 800;
                    byte[] data = new byte[size];
                    for (int i = 0; i < size; i++)
                    {
                        data[i] = (byte)i;
                    }
                    blob.Prep(data, size);

                    testClient.Send(blob);
                }
                if (key == ConsoleKey.A)
                {
                    int    size = 8000;
                    byte[] data = new byte[size];
                    for (int i = 0; i < size; i++)
                    {
                        data[i] = (byte)i;
                    }
                    Utils.DatablobAccumulator acc   = new Utils.DatablobAccumulator();
                    List <DataBlob>           blobs = acc.PrepToSendRawData(data, size);

                    foreach (var blob in blobs)
                    {
                        testClient.Send(blob);
                    }
                }
                if (key == ConsoleKey.S)
                {
                    int    size = 2000000;
                    byte[] data = new byte[size];
                    for (int i = 0; i < size; i++)
                    {
                        data[i] = (byte)i;
                    }
                    Utils.DatablobAccumulator acc   = new Utils.DatablobAccumulator();
                    List <DataBlob>           blobs = acc.PrepToSendRawData(data, size);

                    var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
                    Console.WriteLine(Timestamp);
                    foreach (var blob in blobs)
                    {
                        testClient.Send(blob);
                    }
                }
                if (key == ConsoleKey.R)
                {
                    RequestPacket request = (RequestPacket)IntrepidSerialize.TakeFromPool(PacketType.RequestPacket);
                    request.type = RequestPacket.RequestType.RequestRenderFrame;
                    var Timestamp = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds();
                    //Console.WriteLine("request start {0} ms", Timestamp);
                    testClient.startTimeMilliseconds = Timestamp;
                    testClient.Send(request);
                }
            } while (key != ConsoleKey.Escape);

            testClient.Close();
        }
示例#12
0
        static void Main(string[] args)
        {
            CommonLibrary.Parser.ParseCommandLine(args);
            Int64 applicationId = CommonLibrary.Parser.ApplicationId;

            if (applicationId == 0)
            {
                applicationId = Network.Utils.GetIPBasedApplicationId();
            }
            float  sleepTime = 1000.0f / (float)CommonLibrary.Parser.FPS;
            string ipAddr    = CommonLibrary.Parser.ipAddr;

            Console.WriteLine("Client talking to Gateway.");
            Console.WriteLine("  Press L to login (auto login is set).");
            Console.WriteLine("  Press P to update player position.");
            Console.WriteLine("  Press K to change to main player position.");
            Console.WriteLine("  ** application id = {0} **", applicationId);
            Console.WriteLine("  Press esc to update player position.\n\n");
            ushort port = 11000;
            TestClientToGatewayController testClient = new TestClientToGatewayController(ipAddr, port, applicationId);

            ConsoleKey key;

            do
            {
                while (!Console.KeyAvailable)
                {
                }
                key = Console.ReadKey(true).Key;
                if (key == ConsoleKey.L)
                {
                    LoginCredentials cred = (LoginCredentials)IntrepidSerialize.TakeFromPool(PacketType.LoginCredentials);
                    cred.password.Copy("password");
                    cred.playerName.Copy("mickey");
                    testClient.Send(cred);
                    Console.WriteLine("login sent.");
                }

                if (key == ConsoleKey.P)
                {
                    WorldEntityPacket we = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                    we.entityId = 1024;
                    we.position.Set(new Vector3(10, 20, 30));
                    we.rotation.Set(new Vector3(10, 20, 30));

                    testClient.Send(we);
                    Console.WriteLine("position sent.");
                }
                if (key == ConsoleKey.K)
                {
                    WorldEntityPacket we = (WorldEntityPacket)IntrepidSerialize.TakeFromPool(PacketType.WorldEntity);
                    we.entityId = 1024;
                    we.position.Set(new Vector3(44, 0.20f, 21));
                    we.rotation.Set(new Vector3(5, 25, 30));

                    testClient.Send(we);
                    Console.WriteLine("position sent.");
                }
                if (key == ConsoleKey.M)
                {
                    Console.WriteLine("Major list of crap to send");
                    var test = new Packets.TestPacket();
                    Packets.TestDataBlob blob1 = new Packets.TestDataBlob(1, 2);
                    Packets.TestDataBlob blob2 = new Packets.TestDataBlob(3, 4);
                    Packets.TestDataBlob blob3 = new Packets.TestDataBlob(5, 6);
                    test.listOfBlobs.listOfSerializableItems.Add(blob1);
                    test.listOfBlobs.listOfSerializableItems.Add(blob2);
                    test.listOfBlobs.listOfSerializableItems.Add(blob3);
                    testClient.Send(test);
                }
                if (key == ConsoleKey.T)
                {
                    Console.WriteLine("Sending round trip");
                    ServerPingHopperPacket hopper = (ServerPingHopperPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerPingHopper);
                    hopper.Stamp("client start");
                    testClient.Send(hopper);
                }
            } while (key != ConsoleKey.Escape);

            testClient.Close();
        }
示例#13
0
        void HandleNormalPackets(Queue <BasePacket> listOfPackets)
        {
            foreach (var packet in listOfPackets)
            {
                //Console.WriteLine("normal packet received {0} .. isLoggedIn = true", packet.PacketType);
                numPacketsReceived++;
                // normal processing
                if (packet is PlayerFullPacket && localPlayer.entityId == 0)
                {
                    localPlayer.entityId = (packet as PlayerFullPacket).entityId;
                }

                /*     ServerTick st = packet as ServerTick;
                 *   if(st != null)
                 *   {
                 *       Console.WriteLine("server tick {0}", st.TickCount);
                 *
                 *       continue;
                 *   }*/
                KeepAlive ka = packet as KeepAlive;
                if (ka != null)
                {
                    KeepAliveResponse kar = (KeepAliveResponse)IntrepidSerialize.TakeFromPool(PacketType.KeepAliveResponse);
                    socket.Send(kar);
                }

                if (packet is ServerPingHopperPacket)
                {
                    ServerPingHopperPacket hopper = packet as ServerPingHopperPacket;
                    hopper.Stamp("client end");
                    hopper.PrintList();
                }
                if (packet is WorldEntityPacket)
                {
                    WorldEntityPacket wep = packet as WorldEntityPacket;
                    if (localPlayer.entityId == wep.entityId)
                    {
                        localPlayer.position = wep.position.Get();
                        localPlayer.rotation = wep.rotation.Get();
                    }
                }
                EntityPacket ep = packet as EntityPacket;
                if (ep != null)
                {
                    //entityId = ep.entityId;
                    int tempEntityId = ep.entityId;
                    if (localPlayer.entityId == tempEntityId)
                    {
                        Console.Write("This entity packet updated {0}\n", tempEntityId);
                    }

                    /* else
                     * {
                     *   Console.Write("Entity update packet {0}\n", tempEntityId);
                     * }*/
                    continue;
                }

                // Console.WriteLine("normal packet received {0}", packet.PacketType);

                IntrepidSerialize.ReturnToPool(packet);
            }
        }
示例#14
0
 private void OnWorldEntityPacket(WorldEntityPacket packet)
 {
     transform.position = packet.position.Get();
     transform.rotation = Quaternion.Euler(packet.rotation.Get());
 }
示例#15
0
        private void Sock_OnPacketsReceived(IPacketSend arg1, Queue <BasePacket> listOfPackets)
        {
            // all of these boolean checks should be replaced by a Strategy
            if (isBoundToGateway == true)
            {
                foreach (var packet in listOfPackets)
                {
                    numPacketsReceived++;
                    // normal processing

                    KeepAlive ka = packet as KeepAlive;
                    if (ka != null)
                    {
                        KeepAliveResponse kar = (KeepAliveResponse)IntrepidSerialize.TakeFromPool(PacketType.KeepAliveResponse);
                        socket.Send(kar);
                        continue;
                    }
                    WorldEntityPacket wep = packet as WorldEntityPacket;
                    if (wep != null)
                    {
                        foreach (var playerId in playerIds)
                        {
                            if (playerId.entityId == wep.entityId)
                            {
                                playerId.position = wep.position.Get();
                                playerId.rotation = wep.rotation.Get();

                                SendAllEntityPositions();
                            }
                        }
                        continue;
                    }

                    ServerConnectionHeader sch = packet as ServerConnectionHeader;
                    if (sch != null)
                    {
                        nextConnectionId = sch.connectionId;
                        continue;
                    }
                    PlayerSaveStatePacket pss = packet as PlayerSaveStatePacket;
                    if (pss != null)
                    {
                        HandlePlayerSaveState(pss);
                        continue;
                    }
                    if (packet is ServerPingHopperPacket)
                    {
                        HandleServerHopping(packet as ServerPingHopperPacket);
                        continue;
                    }
                }
            }
            else
            {
                foreach (var packet in listOfPackets)
                {
                    numPacketsReceived++;
                    if (packet is ServerIdPacket)
                    {
                        ServerIdPacket id = packet as ServerIdPacket;
                        if (id != null && id.Type == ServerIdPacket.ServerType.Gateway)
                        {
                            isBoundToGateway = true;
                            break;
                        }
                    }
                }
            }
        }