예제 #1
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);
        }
예제 #2
0
        public override void CheckRequest()
        {
            base.CheckRequest();
            var result = _session.UserInfo.JoinedChannels.
                         Where(c => c.Property.ChannelName == _modeCmd.ChannelName);

            if (result.Count() != 1)
            {
                _errorCode = ChatError.NoSuchChannel;
                return;
            }
            _channel = result.First();
        }
예제 #3
0
        public bool GetJoinedChannel(string channelName, out ChatChannelBase channel)
        {
            var result = JoinedChannels.Where(c => c.Property.ChannelName == channelName);

            if (result.Count() == 1)
            {
                channel = result.First();
                return(true);
            }
            else
            {
                channel = null;
                return(false);
            }
        }
예제 #4
0
 public static bool RemoveChannel(ChatChannelBase channel)
 {
     return(RemoveChannel(channel.Property.ChannelName));
 }
예제 #5
0
 public static bool AddChannel(string name, ChatChannelBase channel)
 {
     return(Channels.TryAdd(name, channel));
 }
예제 #6
0
 public static bool GetChannel(string name, out ChatChannelBase channel)
 {
     return(Channels.TryGetValue(name, out channel));
 }
예제 #7
0
 public void BuildListRPL(ChatChannelBase channel)
 {
     _sendingBuffer = ChatReply.BuildListStartReply(_session.UserInfo, channel.Property);
 }