コード例 #1
0
ファイル: ScheduleTask.cs プロジェクト: wxlonstar/Fenix
 public ScheduleTask(IChannelManager channelManager, Ukcp ukcp, IScheduleThread scheduleThread)
 {
     _imessageExecutor = ukcp.IMessageExecutor;
     _channelManager   = channelManager;
     _ukcp             = ukcp;
     _scheduleThread   = scheduleThread;
 }
コード例 #2
0
 public void del(Ukcp ukcp)
 {
     if (!_ukcps.TryRemove(ukcp.user().RemoteAddress, out var temp))
     {
         Console.WriteLine("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
     }
 }
コード例 #3
0
        public static WriteTask New(Ukcp kcp)
        {
            WriteTask recieveTask = RECYCLER.Take();

            recieveTask.kcp = kcp;
            return(recieveTask);
        }
コード例 #4
0
ファイル: ConvChannelManager.cs プロジェクト: dora-BYR/Fenix
 public void del(Ukcp ukcp)
 {
     if (!_ukcps.TryRemove(ukcp.getConv(), out var temp))
     {
         Console.WriteLine("ukcp session is not exist conv: " + ukcp.getConv());
     }
 }
コード例 #5
0
        public static ReadTask New(Ukcp kcp)
        {
            ReadTask readTask = RECYCLER.Take();

            readTask.kcp = kcp;
            return(readTask);
        }
コード例 #6
0
ファイル: KcpClient.cs プロジェクト: dora-BYR/Fenix
        public Ukcp connect(IChannel localChannel, EndPoint remoteAddress, ChannelConfig channelConfig, KcpListener kcpListener)
        {
            KcpOutput   kcpOutput   = new KcpOutPutImp();
            ReedSolomon reedSolomon = null;

            if (channelConfig.FecDataShardCount != 0 && channelConfig.FecParityShardCount != 0)
            {
                reedSolomon = ReedSolomon.create(channelConfig.FecDataShardCount, channelConfig.FecParityShardCount);
            }

            var _messageExecutor = _executorPool.GetAutoMessageExecutor();

            var ukcp = new Ukcp(kcpOutput, kcpListener, _messageExecutor, reedSolomon, channelConfig);

            var user = new User(localChannel, remoteAddress, localChannel.LocalAddress);

            ukcp.user(user);

            _channelManager.New(localChannel.LocalAddress, ukcp, null);

            var scheduleTask = new ScheduleTask(_channelManager, ukcp);

            KcpUntils.scheduleHashedWheel(scheduleTask, TimeSpan.FromMilliseconds(ukcp.getInterval()));
            return(ukcp);
        }
コード例 #7
0
 /**
  * 重连接口
  * 使用旧的kcp对象,出口ip和端口替换为新的
  * 在4G切换为wifi等场景使用
  * @param ukcp
  */
 public void reconnect(Ukcp ukcp)
 {
     if (!(_channelManager is ServerConvChannelManager))
     {
         throw new Exception("reconnect can only be used in convChannel");
     }
     ukcp.IMessageExecutor.execute(new ReconnectTask(ukcp, bootstrap));
 }
コード例 #8
0
 public void del(Ukcp ukcp)
 {
     _ukcps.TryRemove(ukcp.user().LocalAddress, out var temp);
     if (temp == null)
     {
         Console.WriteLine("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
     }
     ukcp.user().Channel.CloseAsync();
 }
コード例 #9
0
 public void del(Ukcp ukcp)
 {
     _ukcps.TryRemove(ukcp.getConv(), out var temp);
     if (temp == null)
     {
         Console.WriteLine("ukcp session is not exist conv: " + ukcp.getConv());
     }
     ukcp.user().Channel.CloseAsync();
 }
コード例 #10
0
        public void del(Ukcp ukcp)
        {
            if (!_ukcps.TryRemove(ukcp.user().LocalAddress, out var temp))
            {
#if !UNITY_5_3_OR_NEWER
                Console.WriteLine("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
#else
                UnityEngine.Debug.Log("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
#endif
            }
        }
コード例 #11
0
        public void New(EndPoint endPoint, Ukcp ukcp, DatagramPacket msg)
        {
            var conv = ukcp.getConv();

            if (msg != null)
            {
                conv = getConv(msg);
                ukcp.setConv(conv);
            }
            _ukcps.TryAdd(conv, ukcp);
        }
コード例 #12
0
        public void del(Ukcp ukcp)
        {
            _ukcps.TryRemove(ukcp.user().LocalAddress, out var temp);
            if (temp == null)
            {
#if !UNITY_5_3_OR_NEWER
                Console.WriteLine("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
#else
                Console.WriteLine("ukcp session is not exist RemoteAddress: " + ukcp.user().RemoteAddress);
#endif
            }
            ukcp.user().Channel.CloseAsync();
        }
コード例 #13
0
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            var  msg     = (DatagramPacket)message;
            var  channel = context.Channel;
            var  ukcp    = _channelManager.get(msg);
            var  content = msg.Content;
            User user;

            if (ukcp != null)
            {
                user = ukcp.user();
                //每次收到消息重绑定地址
                user.RemoteAddress = msg.Sender;
                ukcp.read(content);
                return;
            }


            //如果是新连接第一个包的sn必须为0
            var sn = getSn(content, _channelConfig);

            if (sn != 0)
            {
                msg.Release();
                return;
            }

            var       messageExecutor = _executorPool.GetAutoMessageExecutor();
            KcpOutput kcpOutput       = new KcpOutPutImp();

            ReedSolomon reedSolomon = null;

            if (_channelConfig.FecDataShardCount != 0 && _channelConfig.FecParityShardCount != 0)
            {
                reedSolomon = ReedSolomon.create(_channelConfig.FecDataShardCount, _channelConfig.FecParityShardCount);
            }

            ukcp = new Ukcp(kcpOutput, _kcpListener, messageExecutor, reedSolomon, _channelConfig);

            user = new User(channel, msg.Sender, msg.Recipient);
            ukcp.user(user);
            _channelManager.New(msg.Sender, ukcp, msg);

            messageExecutor.execute(new ConnectTask(ukcp, _kcpListener));

            ukcp.read(content);

            var scheduleTask = new ScheduleTask(_channelManager, ukcp, _scheduleThread);

            _scheduleThread.schedule(scheduleTask, TimeSpan.FromMilliseconds(ukcp.getInterval()));
        }
コード例 #14
0
        public override void ChannelRead(IChannelHandlerContext context, object message)
        {
            long last_ts = DateTime.Now.Ticks;
            var  msg     = (DatagramPacket)message;
            var  channel = context.Channel;
            var  ukcp    = _channelManager.get(msg);
            var  content = msg.Content;
            User user;

            if (ukcp != null)
            {
                user = ukcp.user();
                //每次收到消息重绑定地址
                user.RemoteAddress = msg.Sender;
                ukcp.read(content);
                //Console.WriteLine(string.Format("(LAGS1){0}", (DateTime.Now.Ticks - last_ts)/10000.0));
                return;
            }

            var       messageExecutor = _executorPool.GetAutoMessageExecutor();
            KcpOutput kcpOutput       = new KcpOutPutImp();

            ReedSolomon reedSolomon = null;

            if (_channelConfig.FecDataShardCount != 0 && _channelConfig.FecParityShardCount != 0)
            {
                reedSolomon = ReedSolomon.create(_channelConfig.FecDataShardCount, _channelConfig.FecParityShardCount);
            }

            ukcp = new Ukcp(kcpOutput, _kcpListener, messageExecutor, reedSolomon, _channelConfig);

            user = new User(channel, msg.Sender, msg.Recipient);
            ukcp.user(user);

            _channelManager.New(msg.Sender, ukcp, msg);

            ukcp.connect();

            ukcp.read(content);

            var scheduleTask = new ScheduleTask(_channelManager, ukcp);

            //Console.WriteLine(ukcp.getInterval());
            KcpUntils.scheduleHashedWheel(scheduleTask, TimeSpan.FromMilliseconds(ukcp.getInterval()));

            Console.WriteLine(string.Format("(LAGS2){0}", (DateTime.Now.Ticks - last_ts) / 10000.0));
        }
コード例 #15
0
 public ConnectTask(Ukcp ukcp, KcpListener listener)
 {
     _ukcp     = ukcp;
     _listener = listener;
 }
コード例 #16
0
 public CloseTask(Ukcp ukcp)
 {
     _ukcp = ukcp;
 }
コード例 #17
0
 public void New(EndPoint endPoint, Ukcp ukcp, DatagramPacket msg)
 {
     _ukcps[endPoint] = ukcp;
 }
コード例 #18
0
 private void release()
 {
     kcp.WriteProcessing.Set(false);
     kcp = null;
     recyclerHandle.Release(this);
 }
コード例 #19
0
ファイル: ScheduleTask.cs プロジェクト: dora-BYR/Fenix
 public ScheduleTask(IChannelManager channelManager, Ukcp ukcp)
 {
     _imessageExecutor = ukcp.IMessageExecutor;
     _channelManager   = channelManager;
     _ukcp             = ukcp;
 }
コード例 #20
0
 public ReconnectTask(Ukcp ukcp, Bootstrap bootstrap)
 {
     _ukcp      = ukcp;
     _bootstrap = bootstrap;
 }
コード例 #21
0
ファイル: ConnectTask.cs プロジェクト: dora-BYR/Fenix
 public ConnectTask(Ukcp ukcp)
 {
     _ukcp = ukcp;
 }