Пример #1
0
        public virtual WhoResponse ParseResponse(Message message)
        {
            var channel = Server.LookUpChannel(message.Args[0]);

            var realName = message.Args[6];
            var index    = realName.IndexOf(' ');
            int hopCount = -1;

            if (-1 != index)
            {
                if (Int32.TryParse(realName.Substring(0, index), NumberStyles.Integer, CultureInfo.InvariantCulture, out hopCount))
                {
                    realName = realName.Substring(index + 1);
                }
            }

            var response = new WhoResponse {
                ChannelName = message.Args[0],
                UserName    = message.Args[1],
                HostName    = message.Args[2],
                ServerName  = message.Args[3],
                NickName    = message.Args[4],
                Flags       = message.Args[5],
                HopCount    = hopCount,
                RealName    = realName,
            };

            var user = Server.LookUpUser(response.NickName) ?? new User {
                NickName        = response.NickName,
                ProtocolHandler = ProtocolHandler,
                Server          = Server,
            };

            user.UserName = response.UserName;
            user.HostName = response.HostName;
            user.RealName = response.RealName;

            if (null != channel)
            {
                try {
                    user.Channels.AddIfMissing(message.Args[0], channel);
                    channel.Users.Add(user);
                }
                catch (Exception e) {
                    Debug.Print("WhoResponseParser.ParseResponse: caught exception:\n{0}", e);
                    Debugger.Break( );
                }
            }

            return(response);
        }
Пример #2
0
        //
        // Event handlers
        //

        // Handler object events

        private void HandleNamesComplete(object sender, NamesCompleteEventArgs ev)
        {
            Debug.Print("Channel.HandleNamesComplete: typeof(sender)={0} sender={1} channel={2} nicks={3}", sender.GetType( ), sender, Name, string.Join(",", ev.NickNames));
            if (null == Users)
            {
                Users = new Collection <User>( );
            }
            else
            {
                Users.Clear( );
            }
            if (null == UserFlags)
            {
                UserFlags = new Dictionary <User, string>( );
            }
            else
            {
                UserFlags.Clear( );
            }

            var flagList = string.IsNullOrEmpty(Server.Information.ChannelModes.StatusSigils) ? "@+" : Server.Information.ChannelModes.StatusSigils;

            foreach (var item in ev.NickNames)
            {
                var flags = string.Empty;
                for (var i = 0; i < item.Length; i++)
                {
                    if (flagList.IndexOf(item[i]) > -1)
                    {
                        flags += item[i];
                    }
                    else
                    {
                        var channelMember = new NickUserHost(item.Substring(i));
                        var user          = Server.LookUpUser(channelMember.NickName) ?? new User {
                            NickUserHost    = channelMember,
                            ProtocolHandler = ProtocolHandler,
                            Server          = Server,
                        };
                        Users.Add(user);
                        UserFlags.Add(user, flags);
                        break;
                    }
                }
            }
        }