コード例 #1
0
    public void ReadEvents <TInputStream>(ref TInputStream input, INetworkCallbacks networkConsumer) where TInputStream : NetworkCompression.IInputStream
    {
        //input.SetStatsType(NetworkCompressionReader.Type.Event);
        var numEvents = NetworkEvent.ReadEvents(eventTypesIn, connectionId, ref input, networkConsumer);

        counters.eventsIn += numEvents;
    }
コード例 #2
0
        public void ReadPackage(byte[] packageData, INetworkCallbacks loop)
        {
            counters.bytesIn += packageData.Length;

            NetworkUtils.MemCopy(packageData, 0, packageBuffer, 0, packageData.Length);

            NetworkMessage content;

            int headerSize;
            var packageSequence = ProcessPackageHeader(packageBuffer, out content, out headerSize);

            var input = new RawInputStream(packageBuffer, headerSize);

            if ((content & NetworkMessage.ClientConfig) != 0)
            {
                ReadClientConfig(ref input);
            }

            if ((content & NetworkMessage.Commands) != 0)
            {
                ReadCommands(ref input);
            }

            if ((content & NetworkMessage.Events) != 0)
            {
                ReadEvents(ref input, loop);
            }
        }
コード例 #3
0
    public void OnData(int connectionId, byte[] data, INetworkCallbacks loop)
    {
        if (!_serverConnections.ContainsKey(connectionId))
        {
            return;
        }

        _serverConnections[connectionId].ReadPackage(data, loop);
    }
コード例 #4
0
    public void OnDisconnect(int connectionId, INetworkCallbacks loop)
    {
        if (connectionId == PhotonNetwork.LocalPlayer.ActorNumber)
        {
            _connectionState = ConnectionState.Disconnected;
            return;
        }

        GameDebug.Log($"Player {connectionId} is disconnected");
        loop.OnDisconnect(connectionId);

        if (_serverConnections.ContainsKey(connectionId))
        {
            _serverConnections.Remove(connectionId);
        }
    }
コード例 #5
0
    public void OnConnect(int connectionId, INetworkCallbacks loop)
    {
        if (connectionId == PhotonNetwork.LocalPlayer.ActorNumber)
        {
            _connectionState = ConnectionState.Connected;
            return;
        }
        GameDebug.Log($"Player {connectionId} is connected.");

        if (!_serverConnections.ContainsKey(connectionId))
        {
            _serverConnections.Add(connectionId, new ServerConnection(this, connectionId, _transport));
        }

        loop.OnConnect(connectionId);
    }
コード例 #6
0
    public void Update(INetworkCallbacks loop)
    {
        _transport.Update();

        TransportEvent e = new TransportEvent();

        while (_transport.NextEvent(ref e))
        {
            switch (e.type)
            {
            case TransportEvent.Type.Connect:
                OnConnect(e.ConnectionId, loop);
                break;

            case TransportEvent.Type.Disconnect:
                OnDisconnect(e.ConnectionId, loop);
                break;

            case TransportEvent.Type.Data:
                OnData(e.ConnectionId, e.Data, loop);
                break;
            }
        }
    }
コード例 #7
0
    public static int ReadEvents <TInputStream>(Dictionary <ushort, NetworkEventType> eventTypesIn, int connectionId, ref TInputStream input, INetworkCallbacks networkConsumer) where TInputStream : NetworkCompression.IInputStream
    {
        var eventCount = input.ReadPackedUInt(NetworkConfig.eventCountContext);

        for (var eventCounter = 0; eventCounter < eventCount; ++eventCounter)
        {
            var typeId         = (ushort)input.ReadPackedUInt(NetworkConfig.eventTypeIdContext);
            var schemaIncluded = input.ReadRawBits(1) != 0;
            if (schemaIncluded)
            {
                var eventType = new NetworkEventType()
                {
                    typeId = typeId
                };
                eventType.schema = NetworkSchema.ReadSchema(ref input);

                if (!eventTypesIn.ContainsKey(typeId))
                {
                    eventTypesIn.Add(typeId, eventType);
                }
            }

            // TODO (petera) do we need to Create an info (as we are just releasing it right after?)
            var type = eventTypesIn[typeId];
            var info = Create(type);
            NetworkSchema.CopyFieldsToBuffer(type.schema, ref input, info.data);
            if (NetworkConfig.netDebug.IntValue > 0)
            {
                GameDebug.Log("Received event " + ((GameNetworkEvents.EventType)info.type.typeId + ":" + info.sequence));
            }

            networkConsumer.OnEvent(connectionId, info);

            info.Release();
        }
        return((int)eventCount);
    }
コード例 #8
0
        public void ReadPackage(byte[] packageData, ISnapshotConsumer snapshotConsumer, INetworkCallbacks networkClientConsumer)
        {
            counters.bytesIn += packageData.Length;

            NetworkUtils.MemCopy(packageData, 0, packageBuffer, 0, packageData.Length);

            NetworkMessage content;
            int            headerSize;
            var            packageSequence = ProcessPackageHeader(packageBuffer, out content, out headerSize);

            // The package was dropped (duplicate or too old) or if it was a fragment not yet assembled, bail out here
            if (packageSequence == 0)
            {
                return;
            }

            var input = new RawInputStream();

            input.Initialize(packageBuffer, headerSize);

            if ((content & NetworkMessage.ClientInfo) != 0)
            {
                ReadClientInfo(ref input);
            }

            if ((content & NetworkMessage.MapInfo) != 0)
            {
                ReadMapInfo(ref input);
            }

            if ((content & NetworkMessage.Snapshot) != 0)
            {
                ReadSnapshot(packageSequence, ref input, snapshotConsumer);

                // Make sure the callback actually picked up the snapshot data. It is important that
                // every snapshot gets processed by the game so that the spawns, despawns and updates lists
                // does not end up containing stuff from different snapshots
                //GameDebug.Assert(spawns.Count == 0 && despawns.Count == 0 && updates.Count == 0, "Game did not consume snapshots");
            }

            if ((content & NetworkMessage.Events) != 0)
            {
                ReadEvents(ref input, networkClientConsumer);
            }
        }
コード例 #9
0
    public void ReadEvents(ref RawInputStream input, INetworkCallbacks networkConsumer)
    {
        var numEvents = NetworkEvent.ReadEvents(eventTypesIn, ConnectionId, ref input, networkConsumer);

        counters.eventsIn += numEvents;
    }