private void OnComplete( NickUserHost target ) { var handler = Complete; if ( null != handler ) { handler( this, new WhoisCompleteEventArgs( target, _responses ) ); } }
// // 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; } } } }
private void OnWhoisComplete(NickUserHost target, Collection <Message> responses) { var handler = WhoisComplete; if (null != handler) { handler(this, new WhoisCompleteEventArgs(target, responses)); } }
// 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); } }
private void OnServerNotice(NickUserHost origin, string text) { var handler = ServerNotice; if (null != handler) { handler(this, new ServerNoticeEventArgs(origin, text)); } }
private void OnComplete(NickUserHost target) { var handler = Complete; if (null != handler) { handler(this, new WhoisCompleteEventArgs(target, _responses)); } }
// // 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)); }
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); }
// 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 ); } }
// // 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; } } } }
// 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); } }
private void OnWhoisComplete( NickUserHost target, Collection<Message> responses ) { var handler = WhoisComplete; if ( null != handler ) { handler( this, new WhoisCompleteEventArgs( target, responses ) ); } }
private void OnServerNotice( NickUserHost origin, string text ) { var handler = ServerNotice; if ( null != handler ) { handler( this, new ServerNoticeEventArgs( origin, text ) ); } }
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; }
public WhoisCompleteEventArgs( NickUserHost target, Collection<Message> responses ) { Target = target; Responses = responses; }
public ServerNoticeEventArgs( NickUserHost origin, string text ) { Origin = origin; Text = text; }
// // 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; } } } }
public WhoisCompleteEventArgs(NickUserHost target, Collection <Message> responses) { Target = target; Responses = responses; }
public ServerNoticeEventArgs(NickUserHost origin, string text) { Origin = origin; Text = text; }
// 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 ); } }