Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }