Ejemplo n.º 1
0
 public static void KcpSetoutput(IntPtr kcp, KcpOutput output)
 {
     if (kcp == IntPtr.Zero)
     {
         throw new Exception($"kcp error, kcp point is zero");
     }
     ikcp_setoutput(kcp, output);
 }
Ejemplo n.º 2
0
        public void SetOutput()
        {
#if ENABLE_IL2CPP
            Kcp.KcpSetoutput(this.kcp, KcpOutput);
#else
            // 跟上一行一样写法,pc跟linux会出错, 保存防止被GC
            kcpOutput = KcpOutput;
            Kcp.KcpSetoutput(this.kcp, kcpOutput);
#endif
        }
Ejemplo n.º 3
0
        public static void KcpSetoutput(IntPtr kcp, KcpOutput output)
        {
            if (kcp == IntPtr.Zero)
            {
                throw new Exception("kcp error, kcp point is zero");
            }
            IntPtr fn = Marshal.GetFunctionPointerForDelegate(output);

            ikcp_setoutput(kcp, fn);
        }
Ejemplo n.º 4
0
        /**
         * Creates a new instance.
         *
         * @param output output for kcp
         */
        public Ukcp(KcpOutput output, KcpListener kcpListener, IMessageExecutor iMessageExecutor,
                    ReedSolomon reedSolomon, ChannelConfig channelConfig)
        {
            this._channelConfig    = channelConfig;
            this.kcp               = new Kcp(channelConfig.Conv, output);
            this.active            = true;
            this._kcpListener      = kcpListener;
            this._iMessageExecutor = iMessageExecutor;
            //默认2<<11   可以修改
            _writeQueue = new MpscArrayQueue <IByteBuffer>(2 << 10);
            _readQueue  = new MpscArrayQueue <IByteBuffer>(2 << 10);
            //recieveList = new SpscLinkedQueue<>();
            int headerSize = 0;

            if (channelConfig.KcpTag)
            {
                headerSize += KCP_TAG;
            }

            //init crc32
            if (channelConfig.Crc32Check)
            {
                var kcpOutput = kcp.Output;
                kcpOutput   = new Crc32OutPut(kcpOutput, headerSize);
                kcp.Output  = kcpOutput;
                headerSize += HEADER_CRC;
            }

            //init fec
            if (reedSolomon != null)
            {
                var kcpOutput = kcp.Output;
                _fecEncode  = new FecEncode(headerSize, reedSolomon, channelConfig.Mtu);
                _fecDecode  = new FecDecode(3 * reedSolomon.getTotalShardCount(), reedSolomon, channelConfig.Mtu);
                kcpOutput   = new FecOutPut(kcpOutput, _fecEncode);
                kcp.Output  = kcpOutput;
                headerSize += Fec.fecHeaderSizePlus2;
            }

            kcp.setReserved(headerSize);
            intKcpConfig(channelConfig);
        }
Ejemplo n.º 5
0
 public void SetOutput()
 {
     // 跟上一行一样写法,pc跟linux会出错, 保存防止被GC
     kcpOutput = KcpOutput;
     Kcp.KcpSetoutput(this.kcp, kcpOutput);
 }
Ejemplo n.º 6
0
 private static extern void ikcp_setoutput(IntPtr kcp, KcpOutput output);
Ejemplo n.º 7
0
 public FecOutPut(KcpOutput output, FecEncode fecEncode)
 {
     this.output    = output;
     this.fecEncode = fecEncode;
 }
Ejemplo n.º 8
0
 public Kcp(int conv, KcpOutput output)
 {
     this.conv   = conv;
     this.output = output;
     this.mss    = mtu - IKCP_OVERHEAD;
 }
Ejemplo n.º 9
0
 private static extern void ikcp_setoutput(KcpOutput output);
Ejemplo n.º 10
0
 public static void KcpSetoutput(KcpOutput output)
 {
     KcpOutput = output;
     ikcp_setoutput(KcpOutput);
 }
Ejemplo n.º 11
0
 public Crc32OutPut(KcpOutput output, int headerOffset)
 {
     _output       = output;
     _headerOffset = headerOffset;
 }