Esempio n. 1
0
    public void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
    {
        if (Peers.Contains(peer))
        {
            Peers.Remove(peer);
        }

        LobbyPlayer lp = LobbyMenu.instance.GetPeer(peer);

        if (lp)
        {
            LobbyMenu.instance.RemovePlayer(lp);
        }

        PLobbyPlayer packet = new PLobbyPlayer();

        packet.id     = lp.id;
        packet.name   = lp.name;
        packet.action = false;

        for (int i = 0; i < Peers.Count; i++)
        {
            Peers[i].Send(serializer.Serialize <PLobbyPlayer>(packet), SendOptions.ReliableOrdered);
        }

        Debug.Log("Peer disconnected, reason: " + disconnectInfo.Reason.ToString());
    }
Esempio n. 2
0
        public void CustomPackageTest()
        {
            var writer = new NetDataWriter();

            writer.Put(_serializer.Serialize(_samplePacket));

            var          reader      = new NetDataReader(writer.CopyData());
            SamplePacket readPackage = null;

            _serializer.SubscribeReusable <SamplePacket>(
                packet =>
            {
                readPackage = packet;
            });

            _serializer.ReadAllPackets(reader);

            Assert.NotNull(readPackage);
            Assert.IsTrue(AreSame(_samplePacket.EmptyString, readPackage.EmptyString));
            Assert.AreEqual(_samplePacket.SomeFloat, readPackage.SomeFloat);
            Assert.AreEqual(_samplePacket.SomeIntArray, readPackage.SomeIntArray);
            Assert.IsTrue(AreSame(_samplePacket.SomeString, readPackage.SomeString));
            Assert.AreEqual(_samplePacket.SomeVector2, readPackage.SomeVector2);
            Assert.AreEqual(_samplePacket.SomeVectors, readPackage.SomeVectors);
            Assert.AreEqual(_samplePacket.SomeEnum, readPackage.SomeEnum);
            Assert.AreEqual(_samplePacket.TestObj.Value, readPackage.TestObj.Value);
        }
 public static void Serialize_Class(object obj, BitStreamWriter writer)
 {
     if (obj == null)
     {
         writer.WriteBit(false);
         return;
     }
     writer.WriteBit(true);
     NetSerializer.Serialize(obj, writer);
 }
 private void NetSerializerTest(NetSerializer serializer, NetDataWriter netDataWriter, Stopwatch stopwatch, SamplePacket samplePacket)
 {
     netDataWriter.Reset();
     stopwatch.Restart();
     for (int i = 0; i < LoopLength; i++)
     {
         serializer.Serialize(netDataWriter, samplePacket);
     }
     stopwatch.Stop();
     Console.WriteLine($"NetSerializer time: {stopwatch.ElapsedMilliseconds} ms, size: { netDataWriter.Length / LoopLength} bytes");
 }
Esempio n. 5
0
    public void OnPeerConnected(NetPeer peer)
    {
        Debug.Log("Connected to " + peer.EndPoint);

        string cName = clientName;

        PClientHandshake packet = new PClientHandshake();

        packet.clientName = cName;

        host.Send(serializer.Serialize(packet), SendOptions.ReliableOrdered);
    }
    // Use this for initialization
    void Start()
    {
        NetSerializer serializer = new NetSerializer();

        SimplePacket packet = new SimplePacket()
        {
            Login    = "******",
            Password = "******"
        };

        serializer.Serialize(packet);
    }
Esempio n. 7
0
            public void OnPeerConnected(NetPeer peer)
            {
                Console.WriteLine("[Client] connected to: {0}:{1}", peer.EndPoint.Host, peer.EndPoint.Port);
                SamplePacket sp = new SamplePacket
                {
                    SomeFloat    = 3.42f,
                    SomeIntArray = new[] { 6, 5, 4 },
                    SomeString   = "Test String",
                    SomeVector2  = new SomeVector2(4, 5),
                    SomeVectors  = new[] { new SomeVector2(1, 2), new SomeVector2(3, 4) }
                };

                Console.WriteLine("Sending to server:\n" + sp);
                peer.Send(_serializer.Serialize(sp), SendOptions.ReliableOrdered);
            }
Esempio n. 8
0
            public void OnPeerConnected(NetPeer peer)
            {
                Console.WriteLine("[Client] connected to: {0}:{1}", peer.EndPoint.Host, peer.EndPoint.Port);
                SamplePacket sp = new SamplePacket
                {
                    SomeFloat    = 3.42f,
                    SomeIntArray = new[] { 6, 5, 4 },
                    SomeString   = "Test String",
                    SomeVector2  = new SomeVector2(4, 5),
                    SomeVectors  = new[] { new SomeVector2(1, 2), new SomeVector2(3, 4) },
                    TestObj      = new SampleNetSerializable {
                        Value = 5
                    }
                };

                byte[] data = _serializer.Serialize(sp);
                Console.WriteLine("Sending to server (length {0}):\n{1}", data.Length, sp);
                peer.Send(data, SendOptions.ReliableOrdered);
            }
Esempio n. 9
0
        private async void OnClientConnection(ClientConnection clientConnection, NetPeer peer)
        {
            GC.Collect();
            //check game state
            if (_gameMode == GameMode.Royale && (_serverState == ServerState.Playing || _serverState == ServerState.EndGame))
            {
                Logger.Log($"SERVER connection attempt during game: {clientConnection.UserId}");
                _server.DisconnectPeer(peer);
                return;
            }

            //check player
            var clientData = await _masterClient.RequestClientInfo(clientConnection.UserId, clientConnection.UserKey);

            if (!clientData.Valid)
            {
                Logger.Log($"SERVER invalid connection attempt: {clientConnection.UserId}", true);
                _server.DisconnectPeer(peer);
                return;
            }

            //add player to wait list
            if (_gameMode == GameMode.Free)
            {
                _waitingPlayers.Add(peer.GetUId(), clientData);
            }

            //create player for royale
            if (_gameMode == GameMode.Royale)
            {
                var player = new Player(clientData.UserId, peer.GetUId(), clientData.Name, clientData.DoubleUnits, _config)
                {
                    UnitSkins = clientData.UnitSkins
                };
                _players.Add(peer.GetUId(), player);
                if (_players.Count == 1)
                {
                    _waitTime    = _config.PlayerWaitTime;
                    _serverState = ServerState.WaitingPlayers;
                }
            }

            //send map
            peer.Send(_netSerializer.Serialize(_world.GetServerMap()), SendOptions.ReliableUnordered);

            //add time
            if (_waitTime < _config.MinWaitTime)
            {
                _waitTime = _config.MinWaitTime;
            }

            //min time if last player
            if (_players.Count >= _config.MaxPlayers && _waitTime > _config.MinWaitTime)
            {
                _waitTime = _config.MinWaitTime;
            }

            //send player info
            Logger.Log($"SERVER player '{clientData.Name}' connected");
            SendPlayersInfo();

            //Send info to master
            await SendInfoToMaster();
        }
Esempio n. 10
0
        private void TestPerformance()
        {
            const int LoopLength = 100000;
            //Test serializer performance
            Stopwatch       stopwatch       = new Stopwatch();
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            MemoryStream    memoryStream    = new MemoryStream();
            NetDataWriter   netDataWriter   = new NetDataWriter();

            SamplePacket samplePacket = new SamplePacket
            {
                SomeFloat    = 0.3f,
                SomeString   = "TEST",
                SomeIntArray = new [] { 1, 2, 3 },
                SomeVector2  = new SomeVector2(1, 2),
                SomeVectors  = new [] { new SomeVector2(3, 4), new SomeVector2(5, 6) }
            };

            NetSerializer netSerializer = new NetSerializer();

            netSerializer.RegisterCustomType <SampleNetSerializable>();
            netSerializer.RegisterCustomType(SomeVector2.Serialize, SomeVector2.Deserialize);

            //Prewarm cpu
            for (int i = 0; i < 10000000; i++)
            {
                double c = Math.Sin(i);
            }

            //Test binary formatter
            stopwatch.Start();
            for (int i = 0; i < LoopLength; i++)
            {
                binaryFormatter.Serialize(memoryStream, samplePacket);
            }
            stopwatch.Stop();
            Console.WriteLine("BinaryFormatter time: " + stopwatch.ElapsedMilliseconds + " ms");

            //Test NetSerializer
            stopwatch.Restart();
            for (int i = 0; i < LoopLength; i++)
            {
                netSerializer.Serialize(netDataWriter, samplePacket);
            }
            stopwatch.Stop();
            Console.WriteLine("NetSerializer first run time: " + stopwatch.ElapsedMilliseconds + " ms");

            //Test NetSerializer
            netDataWriter.Reset();
            stopwatch.Restart();
            for (int i = 0; i < LoopLength; i++)
            {
                netSerializer.Serialize(netDataWriter, samplePacket);
            }
            stopwatch.Stop();
            Console.WriteLine("NetSerializer second run time: " + stopwatch.ElapsedMilliseconds + " ms");

            //Test RAW
            netDataWriter.Reset();
            stopwatch.Restart();
            for (int i = 0; i < LoopLength; i++)
            {
                netDataWriter.Put(samplePacket.SomeFloat);
                netDataWriter.Put(samplePacket.SomeString);
                netDataWriter.PutArray(samplePacket.SomeIntArray);
                netDataWriter.Put(samplePacket.SomeVector2.X);
                netDataWriter.Put(samplePacket.SomeVector2.Y);
                netDataWriter.Put(samplePacket.SomeVectors.Length);
                for (int j = 0; j < samplePacket.SomeVectors.Length; j++)
                {
                    netDataWriter.Put(samplePacket.SomeVectors[j].X);
                    netDataWriter.Put(samplePacket.SomeVectors[j].Y);
                }
                netDataWriter.Put(samplePacket.EmptyString);
                netDataWriter.Put(samplePacket.TestObj.Value);
            }
            stopwatch.Stop();
            Console.WriteLine("DataWriter (raw put method calls) time: " + stopwatch.ElapsedMilliseconds + " ms");
        }
Esempio n. 11
0
        protected override IEnumerator ExecuteRoutine()
        {
            Log.Info("Start Sim Serialization Process...");

            Dictionary <uint, byte[]>        blobAssetsMap = new Dictionary <uint, byte[]>();
            Dictionary <ComponentType, Type> compToManaged = new Dictionary <ComponentType, Type>();
            Dictionary <ComponentType, DynamicComponentTypeHandle> compToHandle = new Dictionary <ComponentType, DynamicComponentTypeHandle>();
            NativeArray <ArchetypeChunk> chunks = _simulationWorld.EntityManager.GetAllChunks(Allocator.TempJob);

            foreach (var item in BlobAssetDataCollectors.Values)
            {
                item.BeginCollect(_simulationWorld);
            }

            // iterate over all chunks
            for (int i = 0; i < chunks.Length; i++)
            {
                ArchetypeChunk chunk = chunks[i];

                // iterate over all components in chunk
                foreach (ComponentType c in chunk.Archetype.GetComponentTypes())
                {
                    ComponentType componentType = c;
                    componentType.AccessModeType = ComponentType.AccessMode.ReadOnly;

                    // get managed type
                    if (!compToManaged.TryGetValue(componentType, out Type managedType))
                    {
                        managedType = componentType.GetManagedType();
                        compToManaged[componentType] = managedType;
                    }

                    // if collector exists for given component, invoke it
                    if (BlobAssetDataCollectors.TryGetValue(managedType, out IPtrObjectCollector collector))
                    {
                        // get componentTypeHandle (necessary for chunk data access)
                        if (!compToHandle.TryGetValue(componentType, out DynamicComponentTypeHandle typeHandle))
                        {
                            typeHandle = _simulationWorld.EntityManager.GetDynamicComponentTypeHandle(componentType);
                            compToHandle[componentType] = typeHandle;
                        }

                        // invoke!
                        collector.Collect(typeHandle, chunk, blobAssetsMap);
                    }
                }
            }
            chunks.Dispose();

            foreach (var item in BlobAssetDataCollectors.Values)
            {
                item.EndCollect();
            }

            SerializedWorld serializedWorld = new SerializedWorld();

            {
                serializedWorld.BlobAssets = new SerializedWorld.BlobAsset[blobAssetsMap.Count];
                int i = 0;
                foreach (var item in blobAssetsMap)
                {
                    serializedWorld.BlobAssets[i] = new SerializedWorld.BlobAsset()
                    {
                        Id   = item.Key,
                        Data = item.Value,
                    };
                    i++;
                }
            }

            serializedWorld.WorldData = SerializeUtilityX.SerializeWorld(_simulationWorld.EntityManager, out object[] referencedObjects);

            SerializationData = NetSerializer.Serialize(serializedWorld);

            foreach (var obj in referencedObjects)
            {
                Log.Warning($"The ECS simulation references {obj}, which is a managed object. " +
                            $"This is not allowed for now due to serialization");
            }

            Log.Info("Sim Serialization Complete!");
            TerminateWithSuccess();
            yield break;
        }
 public byte[] Serialize(object toSerialize)
 {
     return(Serializer.Serialize(toSerialize));
 }