Пример #1
0
        public override void CheckRequest()
        {
            base.CheckRequest();

            if (_session.UserInfo.NickName != _setckeyCmd.NickName)
            {
                _errorCode = Entity.Structure.ChatError.Parse;
                return;
            }

            if (!_session.UserInfo.IsJoinedChannel(_setckeyCmd.ChannelName))
            {
                _errorCode = Entity.Structure.ChatError.Parse;
                return;
            }

            if (!ChatChannelManager.GetChannel(_setckeyCmd.ChannelName, out _channel))
            {
                _errorCode = Entity.Structure.ChatError.Parse;
                return;
            }

            if (!_channel.GetChannelUser(_session, out _user))
            {
                _errorCode = Entity.Structure.ChatError.Parse;
                return;
            }
        }
Пример #2
0
 public ChatServer(IPAddress address, int port) : base(address, port)
 {
     SessionManager = new ChatSessionManager();
     ChannelManager = new ChatChannelManager();
     ChannelManager.Start();
     SessionManager.Start();
 }
Пример #3
0
        public void CreateChannel()
        {
            _channel = new ChatChannelBase();

            if (IsPeerServer(_cmd.ChannelName))
            {
                _channel.Property.SetPeerServerFlag(true);
            }

            _user.SetDefaultProperties(true);

            _channel.Property.SetDefaultProperties(_user, _cmd);

            //simple check for avoiding program crash
            if (!_channel.IsUserExisted(_user))
            {
                _channel.AddBindOnUserAndChannel(_user);
            }

            //first we send join information to all user in this channel
            _channel.MultiCastJoin(_user);

            //then we send user list which already in this channel ???????????
            _channel.SendChannelUsersToJoiner(_user);

            //send channel mode to joiner
            _channel.SendChannelModesToJoiner(_user);

            ChatChannelManager.AddChannel(_cmd.ChannelName, _channel);
        }
Пример #4
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();
 }
Пример #5
0
        private void GetChannelUsersInfo()
        {
            ChatChannel channel;

            if (!ChatChannelManager.GetChannel(_request.ChannelName, out channel))
            {
                _errorCode = ChatError.NoSuchChannel;
                return;
            }
            _resultChannel = channel;
        }
Пример #6
0
 public override void Handle(Client client, string alias, string[] arguments)
 {
     if (arguments.Length == 1)
     {
         var channelName = arguments[0].ToLower();
         var channel     = ChatChannelManager.FindByAlias(channelName);
         client.SendServerMessage(channel != null ? $"{channel.Name}: {channel.Description}" : $"Channel '{channelName}' not found!");
     }
     else
     {
         client.SendServerMessage("Invalid arguments given.");
     }
 }
Пример #7
0
 protected override void DataOperation()
 {
     base.DataOperation();
     _user = new ChatChannelUser(_session);
     if (ChatChannelManager.GetChannel(_request.ChannelName, out _channel))
     {
         //join
         JoinChannel();
     }
     else
     {
         //create
         CreateChannel();
     }
 }
Пример #8
0
 public override void CheckRequest()
 {
     base.CheckRequest();
     //can not find any user
     if (!_channel.GetChannelUserBySession(_session, out _user))
     {
         _errorCode     = ChatError.IRCError;
         _sendingBuffer = ChatIRCError.BuildNoSuchNickError();
         return;
     }
     if (!ChatChannelManager.GetChannel(_cmd.ChannelName, out _channel))
     {
         _errorCode     = ChatError.IRCError;
         _sendingBuffer = ChatIRCError.BuildNoSuchChannelError(_cmd.ChannelName);
     }
 }
Пример #9
0
        private void KickAllUserAndShutDownChannel(ChatChannelUser kicker)
        {
            foreach (var user in Property.ChannelUsers)
            {
                //kick all user out
                string kickMsg =
                    ChatReply.BuildKickReply(
                        Property.ChannelName, kicker, user, "Server Hoster leaves channel");

                user.Session.SendAsync(kickMsg);
            }

            ChatChannelManager.RemoveChannel(this);

            GameServer.DeleteSimilarServer(
                kicker.Session.RemoteEndPoint,
                kicker.Session.UserInfo.GameName);
        }
Пример #10
0
        private void GetChannelUsersInfo()
        {
            ChatChannelBase channel;

            if (!ChatChannelManager.GetChannel(_cmd.Name, out channel))
            {
                _errorCode = ChatError.IRCError;
                return;
            }
            _sendingBuffer = "";

            foreach (var user in channel.Property.ChannelUsers)
            {
                _sendingBuffer +=
                    ChatReply.BuildWhoReply(
                        channel.Property.ChannelName,
                        user.UserInfo, user.GetUserModes());
            }
        }
Пример #11
0
 public override void Handle(Client client, string alias, string[] arguments)
 {
     if (arguments.Length == 1)
     {
         var channelName = arguments[0].ToLower();
         var channel     = ChatChannelManager.FindByAlias(channelName);
         if (channel != null)
         {
             client.SendServerMessage(channel.Subscribe(client) ? $"Changed chat channel to {channel.Name}!" : $"Failed to change chat channel to {channel.Name}!");
         }
         else
         {
             client.SendServerMessage($"Channel '{channelName}' not found!");
         }
     }
     else
     {
         client.SendServerMessage("Invalid arguments given.");
     }
 }
Пример #12
0
 public override void Handle(Client client, string alias, string[] arguments)
 {
     foreach (var channel in ChatChannelManager.GetChatChannels())
         client.SendServerMessage($"{channel.Name}: {channel.Description}");
 }