Esempio n. 1
0
 private void OnComplete( NickUserHost target )
 {
     var handler = Complete;
     if ( null != handler ) {
         handler( this, new WhoisCompleteEventArgs( target, _responses ) );
     }
 }
Esempio n. 2
0
        //
        // Event handlers
        //

        // Handler object events

        private void HandleNamesComplete(object sender, NamesCompleteEventArgs ev)
        {
            Debug.Print("Channel.HandleNamesComplete: channel={0} nicks={1}", _name, string.Join(",", ev.NickNames));
            Users     = new Collection <User>( );
            UserFlags = new Dictionary <User, string>( );

            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.LookUpOrRegisterUser(channelMember);
                        _users.Add(user);
                        _userFlags.Add(user, flags);
                        break;
                    }
                }
            }
        }
Esempio n. 3
0
        private void OnWhoisComplete(NickUserHost target, Collection <Message> responses)
        {
            var handler = WhoisComplete;

            if (null != handler)
            {
                handler(this, new WhoisCompleteEventArgs(target, responses));
            }
        }
Esempio n. 4
0
        // Methods

        public void Parse(string rawLine)
        {
            int spaceIndex;

            RawLine = rawLine;
            if (rawLine[0] == ':')
            {
                spaceIndex = rawLine.IndexOf(' ');
                if (spaceIndex == -1)
                {
                    Debug.Print("Message.Parse: Malformed input: starts with an origin but doesn't have a verb or arguments: '{0}'", rawLine);
                    throw new ArgumentException("Malformed input: starts with an origin but doesn't have a verb or arguments.");
                }
                Origin  = new NickUserHost(rawLine.Substring(1, spaceIndex - 1));
                rawLine = rawLine.Substring(spaceIndex + 1);
            }

            spaceIndex = rawLine.IndexOf(' ');
            int colonIndex = -1;

            while (-1 != spaceIndex)
            {
                if (rawLine[0] == ':')
                {
                    colonIndex = Args.Count;
                    Args.Add(rawLine.Substring(1));
                    rawLine = string.Empty;
                    break;
                }
                string chunk = rawLine.Substring(0, spaceIndex);
                Args.Add(chunk);
                rawLine    = rawLine.Substring(spaceIndex + 1);
                spaceIndex = rawLine.IndexOf(' ');
            }
            if (!string.IsNullOrWhiteSpace(rawLine))
            {
                if (rawLine[0] == ':')
                {
                    colonIndex = Args.Count;
                    Args.Add(rawLine.Substring(1));
                }
                else
                {
                    Args.Add(rawLine);
                }
            }

            Verb = Args[0];
            Args.RemoveAt(0);
            colonIndex--;

            if ((colonIndex > 0) || (colonIndex < 0 && Args.Count > 1))
            {
                Target = Args[0];
                Args.RemoveAt(0);
            }
        }
Esempio n. 5
0
        private void OnServerNotice(NickUserHost origin, string text)
        {
            var handler = ServerNotice;

            if (null != handler)
            {
                handler(this, new ServerNoticeEventArgs(origin, text));
            }
        }
Esempio n. 6
0
        private void OnComplete(NickUserHost target)
        {
            var handler = Complete;

            if (null != handler)
            {
                handler(this, new WhoisCompleteEventArgs(target, _responses));
            }
        }
Esempio n. 7
0
        //
        // Object
        //

        public override bool Equals(object rhs)
        {
            NickUserHost value = rhs as NickUserHost;

            if (null == value)
            {
                return((rhs is string) && string.Equals(_nickUserHost, (string)rhs, StringComparison.OrdinalIgnoreCase));
            }

            return
                (string.Equals(_nickName, value._nickName, StringComparison.OrdinalIgnoreCase) &&
                 string.Equals(_userName, value._userName, StringComparison.OrdinalIgnoreCase) &&
                 string.Equals(_hostName, value._hostName, StringComparison.OrdinalIgnoreCase));
        }
Esempio n. 8
0
        public User LookUpOrRegisterUser(NickUserHost userhost)
        {
            var nick = userhost.NickName;
            var user = LookUpUser(nick);

            if (null == user)
            {
                user = new User {
                    NickUserHost = userhost,
                    Server       = this
                };
                RegisterUser(nick, user);
            }
            return(user);
        }
Esempio n. 9
0
        // Methods
        public void Parse( string rawLine )
        {
            int spaceIndex;

            RawLine = rawLine;
            if ( rawLine[ 0 ] == ':' ) {
                spaceIndex = rawLine.IndexOf( ' ' );
                if ( spaceIndex == -1 ) {
                    Debug.Print( "Message.Parse: Malformed input: starts with an origin but doesn't have a verb or arguments: '{0}'", rawLine );
                    throw new ArgumentException( "Malformed input: starts with an origin but doesn't have a verb or arguments." );
                }
                Origin = new NickUserHost( rawLine.Substring( 1, spaceIndex - 1 ) );
                rawLine = rawLine.Substring( spaceIndex + 1 );
            }

            spaceIndex = rawLine.IndexOf( ' ' );
            int colonIndex = -1;
            while ( -1 != spaceIndex ) {
                if ( rawLine[ 0 ] == ':' ) {
                    colonIndex = Args.Count;
                    Args.Add( rawLine.Substring( 1 ) );
                    rawLine = string.Empty;
                    break;
                }
                string chunk = rawLine.Substring( 0, spaceIndex );
                Args.Add( chunk );
                rawLine = rawLine.Substring( spaceIndex + 1 );
                spaceIndex = rawLine.IndexOf( ' ' );
            }
            if ( !string.IsNullOrWhiteSpace( rawLine ) ) {
                if ( rawLine[ 0 ] == ':' ) {
                    colonIndex = Args.Count;
                    Args.Add( rawLine.Substring( 1 ) );
                } else {
                    Args.Add( rawLine );
                }
            }

            Verb = Args[ 0 ];
            Args.RemoveAt( 0 );
            colonIndex--;

            if ( ( colonIndex > 0 ) || ( colonIndex < 0 && Args.Count > 1 ) ) {
                Target = Args[ 0 ];
                Args.RemoveAt( 0 );
            }
        }
Esempio n. 10
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;
                    }
                }
            }
        }
Esempio n. 11
0
        // Numeric 333
        private void HandleRplTopicWhoTime(object sender, MessageEventArgs ev)
        {
            Debug.Print("Channel.HandleRplTopicWhoTime: args='{0}'", string.Join("','", ev.Message.Args));

            try {
                TopicSetBy = new NickUserHost(ev.Message.Args[1]);
                Debug.Print("Channel.HandleRplTopicWhoTime: topic set by '{0}'", _topicSetBy);
            }
            catch (Exception e) {
                Debug.Print("Channel.HandleRplTopicWhoTime: while setting TopicSetBy: caught exception\n{0}", e);
            }

            try {
                TopicSetAt = UnixTimestampConverter.FromStringSeconds(ev.Message.Args[2]);
                Debug.Print("Channel.HandleRplTopicWhoTime: topic set at {0}", _topicSetAt.ToString("s"));
            }
            catch (Exception e) {
                Debug.Print("Channel.HandleRplTopicWhoTime: while setting TopicSetAt: caught exception\n{0}", e);
            }
        }
Esempio n. 12
0
 private void OnWhoisComplete( NickUserHost target, Collection<Message> responses )
 {
     var handler = WhoisComplete;
     if ( null != handler ) {
         handler( this, new WhoisCompleteEventArgs( target, responses ) );
     }
 }
Esempio n. 13
0
 private void OnServerNotice( NickUserHost origin, string text )
 {
     var handler = ServerNotice;
     if ( null != handler ) {
         handler( this, new ServerNoticeEventArgs( origin, text ) );
     }
 }
Esempio n. 14
0
 public User LookUpOrRegisterUser( NickUserHost userhost )
 {
     var nick = userhost.NickName;
     var user = LookUpUser( nick );
     if ( null == user ) {
         user = new User {
             NickUserHost = userhost,
             Server = this
         };
         RegisterUser( nick, user );
     }
     return user;
 }
Esempio n. 15
0
 public WhoisCompleteEventArgs( NickUserHost target, Collection<Message> responses )
 {
     Target = target;
     Responses = responses;
 }
Esempio n. 16
0
 public ServerNoticeEventArgs( NickUserHost origin, string text )
 {
     Origin = origin;
     Text = text;
 }
Esempio n. 17
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;
                    }
                }
            }
        }
Esempio n. 18
0
 public WhoisCompleteEventArgs(NickUserHost target, Collection <Message> responses)
 {
     Target    = target;
     Responses = responses;
 }
Esempio n. 19
0
 public ServerNoticeEventArgs(NickUserHost origin, string text)
 {
     Origin = origin;
     Text   = text;
 }
Esempio n. 20
0
        // Numeric 333
        private void HandleRplTopicWhoTime( object sender, MessageEventArgs ev )
        {
            Debug.Print( "Channel.HandleRplTopicWhoTime: typeof(sender)={0} sender={1} args='{2}'", sender.GetType( ), sender, string.Join( "','", ev.Message.Args ) );

            try {
                TopicSetBy = new NickUserHost( ev.Message.Args[ 1 ] );
                OnPropertyChanged( "TopicSetBy" );
                Debug.Print( "Channel.HandleRplTopicWhoTime: topic set by '{0}'", TopicSetBy );
            }
            catch ( Exception e ) {
                Debug.Print( "Channel.HandleRplTopicWhoTime: while setting TopicSetBy: caught exception\n{0}", e );
            }

            try {
                TopicSetAt = UnixTimestampConverter.FromStringSeconds( ev.Message.Args[ 2 ] );
                OnPropertyChanged( "TopicSetAt" );
                Debug.Print( "Channel.HandleRplTopicWhoTime: topic set at {0}", TopicSetAt.ToString( "s" ) );
            }
            catch ( Exception e ) {
                Debug.Print( "Channel.HandleRplTopicWhoTime: while setting TopicSetAt: caught exception\n{0}", e );
            }
        }