public override void ServerSend(int connectionId, ArraySegment <byte> segment, int channelId) { server.Send(connectionId, segment, ToKcpChannel(channelId)); // call event. might be null if no statistics are listening etc. OnServerDataSent?.Invoke(connectionId, segment, channelId); }
public override void ServerSend(int connectionId, ArraySegment <byte> segment, int channelId) { // only if server is running and client is connected if (serverActive && clientConnected) { // a real transport fails for > max sized messages. // mirror checks it, but let's guarantee that we catch > max // sized message send attempts just like a real transport would. // => helps to cover packet size issues i.e. for timestamp // batching tests int max = GetMaxPacketSize(channelId); if (segment.Count > max) { throw new Exception($"MemoryTransport ServerSend of {segment.Count} bytes exceeds max of {max} bytes"); } // copy segment data because it's only valid until return byte[] data = new byte[segment.Count]; Array.Copy(segment.Array, segment.Offset, data, 0, segment.Count); // add client data message clientIncoming.Enqueue(new Message(0, EventType.Data, data)); // call event. might be null if no statistics are listening etc. OnServerDataSent?.Invoke(connectionId, segment, channelId); } }