예제 #1
0
 public ChatServer(IPAddress address, int port) : base(address, port)
 {
     SessionManager = new ChatSessionManager();
     ChannelManager = new ChatChannelManager();
     ChannelManager.Start();
     SessionManager.Start();
 }
 private static void OnUpdateSocketServerSessionMessageReceived(UpdateSocketServerSessionMessage message)
 {
     if (ChatSessionManager.TryGet(message.SessionId, out ChatSession session))
     {
         session.UpdateSocketServerSessionMessageReceived(message);
     }
 }
예제 #3
0
        protected override void CheckRequest()
        {
            switch (_request.RequestType)
            {
            case ChatMessageType.ChannelMessage:
                base.CheckRequest();
                break;

            case ChatMessageType.UserMessage:

                if (_request.RequestType == ChatMessageType.UserMessage)
                {
                    if (!ChatSessionManager.GetSessionByNickName(_request.NickName, out _otherSession))
                    {
                        _errorCode     = ChatError.NoSuchNick;
                        _sendingBuffer = ChatIRCError.BuildNoSuchNickError();
                    }
                }
                break;

            default:
                _errorCode = ChatError.Parse;
                break;
            }
        }
예제 #4
0
 public override void CheckRequest()
 {
     if (ChatSessionManager.IsNickNameExisted(_nickCmd.NickName))
     {
         _errorCode = ChatError.NickNameInUse;
     }
     base.CheckRequest();
 }
예제 #5
0
        protected override TcpSession CreateSession()
        {
            //add sessions to session manager
            ChatSession session = new ChatSession(this);

            ChatSessionManager.AddSession(session);
            return(session);
        }
예제 #6
0
 public ChatServer(IPAddress address, int port) : base(address, port)
 {
     SessionManager = new ChatSessionManager();
     CommandManager = new ChatCommandManager();
     ChannelManager = new ChatChannelManager();
     //use this to add command into chatserver
     CommandManager.Start();
     ChannelManager.Start();
     SessionManager.Start();
 }
예제 #7
0
        public override void DataOperation()
        {
            base.DataOperation();

            foreach (var channel in _session.UserInfo.JoinedChannels)
            {
                channel.LeaveChannel(_session, _cmd.Reason);
            }
            ChatSessionManager.RemoveSession(_session);
        }
예제 #8
0
        protected override void CheckRequest()
        {
            base.CheckRequest();

            if (ChatSessionManager.IsNickNameExisted(_request.NickName))
            {
                _errorCode = ChatError.NickNameExisted;
                return;
            }
        }
예제 #9
0
        public override void CheckRequest()
        {
            base.CheckRequest();

            if (ChatSessionManager.IsNickNameExisted(_cmd.NickName))
            {
                _errorCode     = ChatError.IRCError;
                _sendingBuffer = ChatIRCError.BuildNoSuchNickError();
            }
        }
예제 #10
0
        /// <summary>
        /// Send all channel user information
        /// </summary>
        private void GetUserInfo()
        {
            ChatSession session;

            if (!ChatSessionManager.GetSessionByUserName(_request.NickName, out session))
            {
                _errorCode = ChatError.NoSuchNick;
                return;
            }
            _resultSession = session;
        }
예제 #11
0
        protected override void OnDisconnected()
        {
            foreach (var channel in ChatChannelManager.Channels.Values)
            {
                channel.LeaveChannel(this, "Disconnected");
            }

            ChatSessionManager.RemoveSession(this);

            base.OnDisconnected();
        }
예제 #12
0
파일: MsgrServer.cs 프로젝트: Vinna/aura
        /// <summary>
        /// Initializes msgr server.
        /// </summary>
        private MsgrServer()
        {
            this.Database           = new MsgrDb();
            this.Conf               = new MsgrConf();
            this.UserManager        = new UserManager();
            this.ChatSessionManager = new ChatSessionManager();

            this.Server          = new MsgrServerServer();
            this.Server.Handlers = new MsgrServerHandlers();
            this.Server.Handlers.AutoLoad();
        }
예제 #13
0
        /// <summary>
        /// Send all channel user information
        /// </summary>
        private void GetUserInfo()
        {
            ChatSession session;

            if (ChatSessionManager.GetSessionByNickName(_cmd.Name, out session))
            {
                BuildWhoReplyForUser(session);
            }
            else if (ChatSessionManager.GetSessionByUserName(_cmd.Name, out session))
            {
                BuildWhoReplyForUser(session);
            }
            else //todo check whether we need this error
            {
                _errorCode     = ChatError.IRCError;
                _sendingBuffer = ChatIRCError.BuildNoSuchNickError();
            }
        }
예제 #14
0
        public override void DataOperation()
        {
            base.DataOperation();

            ChatChannelUser user;

            foreach (var channel in _session.UserInfo.JoinedChannels)
            {
                if (!channel.GetChannelUser(_session, out user))
                {
                    continue;
                }

                channel.RemoveBindOnUserAndChannel(user);
                channel.MultiCastLeave(user, _cmd.Reason);
            }
            ChatSessionManager.RemoveSession(_session);
        }
예제 #15
0
        protected override void OnDisconnected()
        {
            foreach (var channel in ChatChannelManager.Channels.Values)
            {
                ChatChannelUser user;

                if (!channel.GetChannelUser(this, out user))
                {
                    continue;
                }

                channel.RemoveBindOnUserAndChannel(user);
                channel.MultiCastLeave(user, "Disconnected");
            }

            ChatSessionManager.RemoveSession(this);

            base.OnDisconnected();
        }
        private static void OnForwardLogicMessageReceived(ForwardLogicMessage message)
        {
            if (ChatSessionManager.TryGet(message.SessionId, out ChatSession session))
            {
                PiranhaMessage logicMessage = LogicMagicMessageFactory.Instance.CreateMessageByType(message.MessageType);

                if (logicMessage == null)
                {
                    throw new Exception("logicMessage should not be NULL!");
                }

                logicMessage.GetByteStream().SetByteArray(message.MessageBytes, message.MessageLength);
                logicMessage.SetMessageVersion(message.MessageVersion);
                logicMessage.Decode();

                if (!logicMessage.IsServerToClientMessage())
                {
                    session.LogicMessageManager.ReceiveMessage(logicMessage);
                }
            }
        }
        public override void OnReceiveSessionMessage(ServerSessionMessage message)
        {
            switch (message.GetMessageType())
            {
            case ServerMessageType.START_SERVER_SESSION:
                ChatSessionManager.OnStartServerSessionMessageReceived((StartServerSessionMessage)message);
                break;

            case ServerMessageType.STOP_SERVER_SESSION:
                ChatSessionManager.OnStopServerSessionMessageReceived((StopServerSessionMessage)message);
                break;

            case ServerMessageType.UPDATE_SOCKET_SERVER_SESSION:
                ChatMessageManager.OnUpdateSocketServerSessionMessageReceived((UpdateSocketServerSessionMessage)message);
                break;

            case ServerMessageType.FORWARD_LOGIC_MESSAGE:
                ChatMessageManager.OnForwardLogicMessageReceived((ForwardLogicMessage)message);
                break;
            }
        }
 public static void Init()
 {
     ChatSessionManager.Init();
     ChatInstanceManager.Init();
     WordCensorUtil.Init();
 }