예제 #1
0
        public void OnTransportWrite(IUdpSession session, ref WrappedWriter writer, WrappedArgs args)
        {
            //Console.WriteLine($"{nameof(UdpFilter_2)}.{nameof(OnTransportWrite)}");
            var buffer = args.Value as byte[];

            writer.Write(buffer);
        }
예제 #2
0
        public void SendUnreliableAsync(object o)
        {
            lock (this.snd_sync)
            {
                if (this.isClosed)
                {
                    return;
                }

                try
                {
                    this.writerUdpMemory.Clear();
                    //conv使用kcp的序列写入,保证与kcp一致
                    var span = this.writerUdpMemory.GetWritableSpan(4);
                    this.kcpOperators.WriteUInt32(span, this.Conv);
                    writerUdpMemory.WriterAdvance(4);

                    var writer = new WrappedWriter(this.writerUdpMemory, this.Order, this.writerFlushDelegate);
                    this.Pipeline.OnTransportWrite(this, ref writer, o);
                    writer.Flush();
                }
                catch (Exception e)
                {
                    this.DeliverException(e);
                }
            }
        }
예제 #3
0
        public void OnTransportWrite(ITcpSession session, ref WrappedWriter writer, WrappedArgs args)
        {
            var buffer = args.Value as byte[];

            writer.Write(buffer);
            writer.Write(this.symbol);
        }
예제 #4
0
 public void OnTransportWrite(IUdpSession session, ref WrappedWriter writer, WrappedArgs args)
 {
     byte[] bytes = args.Value as byte[];
     if (bytes != null)
     {
         writer.Write(bytes.Length);
         writer.Write(bytes);
     }
 }
예제 #5
0
        public void OnTransportWrite(IUdpSession session, ref WrappedWriter writer, WrappedArgs args)
        {
            if (this.isInvalid || this.isStop)
            {
                return;
            }

            this.controller.OnUdpMessageOutput(session, ref writer, args);
        }
예제 #6
0
        public void OnTransportWrite(TSession session, ref WrappedWriter writer, object o)
        {
            this.writeArgs.Value = o;
            int count = this.filters.Count;

            for (int i = 0; i < count; i++)
            {
                this.filters[i].OnTransportWrite(session, ref writer, this.writeArgs);
            }
        }
예제 #7
0
        public void OnTransportWrite(ITcpSession session, ref WrappedWriter writer, WrappedArgs args)
        {
            var buffer = args.Value as byte[];

            if (buffer.Length > this.maxPackLength)
            {
                throw new Exception("pack length error!!!" + buffer.Length);
            }

            writer.Write((int)buffer.Length);
            writer.Write(buffer);
        }
예제 #8
0
        public override void OnUdpMessageOutput(IUdpSession session, ref WrappedWriter writer, WrappedArgs args)
        {
            IWrappedMemory memory = args.Value as IWrappedMemory;

            if (memory.Flag == MemoryFlag.Kcp)
            {
                //kcp协议
                writer.Write(k_message);
            }
            else if (memory.Flag == MemoryFlag.Udp)
            {
                //普通udp协议
                writer.Write(c_message);
            }

            writer.Write(memory.GetReadableMemory());
        }
예제 #9
0
        public void Write(EndPoint remoteAddress, object o)
        {
            lock (this.sync)
            {
                this.SndAddress = remoteAddress;
                var segment = this.SndPipeWriter.GetSegment();
                segment.Token = remoteAddress;
                try
                {
                    var writer = new WrappedWriter(segment, this.Order, this.writerFlushCallback);
                    this.filterPipeline.OnTransportWrite(this, ref writer, o);
                    writer.Flush();
                }
                catch (Exception e)
                {
                    this.DeliverException(e);

                    this.SndPipeWriter.Complete();
                }
            }
        }
예제 #10
0
        public void SendReliableAsync(object o)
        {
            lock (this.snd_sync)
            {
                if (this.isClosed)
                {
                    return;
                }

                try
                {
                    var memory = this.sndPool.Pop();
                    var writer = new WrappedWriter(memory, this.Order, this.writerFlushDelegate);
                    this.Pipeline.OnTransportWrite(this, ref writer, o);
                    writer.Flush();
                }
                catch (Exception e)
                {
                    this.DeliverException(e);
                }
            }
        }
예제 #11
0
        public override void Write(object o)
        {
            lock (sync)
            {
                if (this.isDisposed)
                {
                    return;
                }

                WrappedWriter writer = new WrappedWriter(this.Output, this.Order, this.writerFlushCallback);
                try
                {
                    this.filterPipeline.OnTransportWrite(this, ref writer, o);
                }
                catch (Exception e)
                {
                    this.DeliverException(e);
                }
                finally
                {
                    writer.Flush();
                }
            }
        }
예제 #12
0
 public void OnTransportWrite(ITcpSession session, ref WrappedWriter writer, WrappedArgs args)
 {
 }
예제 #13
0
 public abstract void OnUdpMessageOutput(IUdpSession session, ref WrappedWriter writer, WrappedArgs args);
예제 #14
0
 public void OnTransportWrite(ITcpSession session, ref WrappedWriter writer, WrappedArgs args)
 {
     // Console.WriteLine($"{nameof(TcpTestFilter_Client)}.{nameof(OnTransportWrite)}");
 }
예제 #15
0
 public void OnTransportWrite(IKcpSession session, ref WrappedWriter writer, WrappedArgs args)
 {
     byte[] bytes = args.Value as byte[];
     //Console.WriteLine("kcp pipeline写入数据>>" + bytes.Length);
     writer.Write(bytes);
 }