Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }