コード例 #1
0
        public void RemoveChannel(IChannel channel)
        {
            IMChannelUser user = IMChannelUser.Get(channel);

            if (user != null)
            {
                sessionManager.RemoveSession(user.UserId);
                onlineChannels.Remove(user.SessionId);
            }

            LogHelper.Info($"Online channel total: {onlineChannels.Count}");
        }
コード例 #2
0
        public void SetChannelAndSession(ulong userid, string sessionid, IChannel channel)
        {
            if (userid <= 0 || string.IsNullOrEmpty(sessionid) || channel == null)
            {
                return;
            }

            onlineChannels.Add(sessionid, channel);
            sessionManager.SetSession(userid, sessionid);

            IMChannelUser.Set(channel, userid, sessionid);
            LogHelper.Info($"Online channel total: {onlineChannels.Count}");
        }
コード例 #3
0
ファイル: ValidateExecutor.cs プロジェクト: oisnull/gittest
        private void ForceOffline()
        {
            IChannel onlineChannel = base.ChannelManager.GetChannel(base.MessageContent.UserId);

            if (onlineChannel != null)
            {
                IMChannelUser client = IMChannelUser.Get(onlineChannel);
                Push(onlineChannel, CreateResponseContext(ImStatus.ForceOffline));

                LogHelper.Debug($"Remote client {onlineChannel.RemoteAddress.ToString()} force offline, session: {client.SessionId}");

                base.ChannelManager.RemoveChannel(onlineChannel);
                onlineChannel.CloseAsync().Wait();
            }
        }
コード例 #4
0
 private void CheckParameters()
 {
     if (this.CurrentChannel == null)
     {
         throw new ArgumentNullException("CurrentChannel");
     }
     if (this.MessageHead == null)
     {
         throw new ArgumentNullException("MessageHead");
     }
     if (this.IsCheckSession)
     {
         IMChannelUser user = IMChannelUser.Get(CurrentChannel);
         if (user == null || user.SessionId != this.MessageHead.Session)
         {
             throw new SessionInvalidException();
         }
     }
 }
コード例 #5
0
        public override void UserEventTriggered(IChannelHandlerContext ctx, object evt)
        {
            if (!(evt is IdleStateEvent))
            {
                return;
            }

            IdleStateEvent idleEvent = (IdleStateEvent)evt;

            if (idleEvent.State == IdleState.WriterIdle)
            {
                //Un auth client
                IMChannelUser user = IMChannelUser.Get(ctx.Channel);
                if (user == null)
                {
                    ctx.Channel.CloseAsync();
                    LogHelper.Info($"Remote client {ctx.Channel.RemoteAddress.ToString()} closed.");
                }
            }
        }
コード例 #6
0
ファイル: ValidateExecutor.cs プロジェクト: oisnull/gittest
        public override void Execute(ImValidateMessage message)
        {
            if (!base.UserAction.ValidateUser(message.UserId, message.Token))
            {
                Push(base.CurrentChannel, CreateResponseContext(ImStatus.Failure, "User token is invalid."));
                return;
            }

            IMChannelUser client   = IMChannelUser.Get(base.CurrentChannel);
            bool          isOnline = ChannelManager.IsOnline(message.UserId);

            if (isOnline)
            {
                if (client == null)
                {
                    this.ForceOffline();
                    this.GenerateNewSession();
                }
                else
                {
                    //already session online
                    Push(base.CurrentChannel, CreateResponseContext(ImStatus.Success, client.SessionId));
                    PushOffline(message.UserId, base.CurrentChannel);
                }
            }
            else
            {
                if (client == null)
                {
                    this.GenerateNewSession();
                }
                else if (client.UserId != message.UserId)
                {
                    Push(base.CurrentChannel, CreateResponseContext(ImStatus.Failure, $"User {client.UserId} is online, Please logout first."));
                }
            }
        }