public override void ClientSend(ArraySegment <byte> segment, int channelId) { client.Send(segment, ToKcpChannel(channelId)); // call event. might be null if no statistics are listening etc. OnClientDataSent?.Invoke(segment, channelId); }
public override void ClientSend(ArraySegment <byte> segment, int channelId) { // only if client connected if (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 ClientSend 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 server data message with connId=1 because 0 is reserved serverIncoming.Enqueue(new Message(1, EventType.Data, data)); // call event. might be null if no statistics are listening etc. OnClientDataSent?.Invoke(segment, channelId); } }