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; }
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); } }
public void OnData(int connectionId, byte[] data, INetworkCallbacks loop) { if (!_serverConnections.ContainsKey(connectionId)) { return; } _serverConnections[connectionId].ReadPackage(data, loop); }
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); } }
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); }
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; } } }
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); }
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); } }
public void ReadEvents(ref RawInputStream input, INetworkCallbacks networkConsumer) { var numEvents = NetworkEvent.ReadEvents(eventTypesIn, ConnectionId, ref input, networkConsumer); counters.eventsIn += numEvents; }