예제 #1
0
        private void MainApplicationConnect(ApportionDispatcher apportionDispatcher)
        {
            var accessId = apportionDispatcher.GetAccessId();
            var mainappChannelDispatcher = apportionDispatcher.CreateMainApplicationChannelDispatcher(_dispatchers);

            if (!_dispatchers.ContainsKey(accessId))//可能重连太快
            {
                //主控端使用自身AccessId作索引
                _dispatchers.Add(accessId, mainappChannelDispatcher);
            }
            else
            {
                var aboutOfCloseDispatcher = _dispatchers[accessId];

                var data = MessageHelper.CopyMessageHeadTo(MessageHead.MID_LOGOUT,
                                                           new LogOutPacket()
                {
                    Message = "已有相同Id的主控端登陆,你已被登出!"
                });
                aboutOfCloseDispatcher.SendTo(data);
                aboutOfCloseDispatcher.CloseSession();
            }
        }
        private void MainApplicationConnect(ApportionDispatcher apportionDispatcher)
        {
            var accessId = apportionDispatcher.GetAccessId();
            var mainappChannelDispatcher = apportionDispatcher.CreateMainApplicationChannelDispatcher(_dispatchers);

            if (_dispatchers.ContainsKey(accessId))//可能重连太快
            {
                var aboutOfCloseDispatcher = _dispatchers[accessId];

                var data = MessageHelper.CopyMessageHeadTo(MessageHead.MID_LOGOUT,
                                                           new LogOutPacket()
                {
                    Message = "已有相同Id的主控端登陆,你已被登出"
                });
                aboutOfCloseDispatcher.SendTo(data);
                aboutOfCloseDispatcher.CloseSession();//调用后底层会触发Closed事件

                this.LogOutputEventHandler?.Invoke(LogOutLevelType.Debug, $"有相同Id:{accessId}的主控端登陆!");
            }
            _dispatchers.Add(accessId, mainappChannelDispatcher);

            this.OnConnectedEventHandler?.Invoke(mainappChannelDispatcher);
        }