internal Task<IIrcChannel> JoinChannel(string name, string password)
        {
            if (!IsChannel(name))
            {
                name = '#' + name;
            }

            IrcChannel channel;
            lock (_channels)
            {
                if (GetChannel(name) != null)
                {
                    throw new InvalidOperationException("Channel already joined");
                }
                channel = new IrcChannel(this, name);
                _channels.Add(name, channel);
            }

            if (password != null)
                SendCommand("JOIN", name, password);
            else
                SendCommand("JOIN", name);

            return channel._loaded.Task;
        }
Beispiel #2
0
        async Task HandleJoin(string prefix, string command, string[] args)
        {
            var client = ParseClient(prefix);

            if (client._nick == _nick) // we just joined a channel. Wait for names (do nothing).
            {
                lock (_channels)
                {
                    IrcChannel channel;
                    if (_channels.TryGetValue(args[0], out channel))
                    {
                        if (channel._state == IrcChannel.State.WaitingForJoin)
                        {
                            channel._state = IrcChannel.State.WaitingForNames;
                            return;
                        }
                    }
                    else
                    {
                        channel = new IrcChannel(this, args[0]);
                        _channels.Add(args[0], channel);
                        channel._state = IrcChannel.State.WaitingForNames;
                        return;
                    }
                }
            }
            else
            {
                lock (_channels)
                {
                    IrcChannel channel;
                    if (_channels.TryGetValue(args[0], out channel))
                    {
                        channel.AddName(client._nick);
                        _channelList.OnUserJoined(channel, channel._userList[client._nick]);
                    }
                    else
                    {
                        throw new InvalidOperationException();
                    }
                }
            }
        }
Beispiel #3
0
 private void OnJoin(IrcChannel channel)
 {
     if (Join != null)
         Join(this, new ChannelEventArgs(channel));
 }
Beispiel #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChannelInstance"/> class.
 /// </summary>
 /// <param name="runner">The runner.</param>
 /// <param name="channel">The channel.</param>
 public ChannelInstance(ScriptRunner runner, IrcChannel channel)
     : base(runner.Engine)
 {
     this.runner = runner;
     this.channel = channel;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="IrcChannelEventArgs"/> class.
 /// </summary>
 /// <param name="channel">The channel.</param>
 public IrcChannelEventArgs(IrcChannel channel)
 {
     this.channel = channel;
 }
 /// <summary>
 /// Called when a channel is joined.
 /// </summary>
 /// <param name="channel">The channel.</param>
 protected virtual void OnChannelJoin(IrcChannel channel)
 {
     if (ChannelJoin != null)
         ChannelJoin(this, new IrcChannelEventArgs(channel));
 }
Beispiel #7
0
 public IrcChannelUser(Guid guid, IrcChannel channel)
     : base(channel._connection, guid)
 {
     // TODO: Complete member initialization
     _channel = channel;
 }
Beispiel #8
0
 public ChannelUserList(IrcChannel channel)
 {
     _channel = channel;
 }
 async Task HandleJoin(string prefix, string command, string[] args)
 {
     var client = ParseClient(prefix);
     if (client._nick == _nick) // we just joined a channel. Wait for names (do nothing).
     {
         lock (_channels)
         {
             IrcChannel channel;
             if (_channels.TryGetValue(args[0], out channel))
             {
                 if (channel._state == IrcChannel.State.WaitingForJoin)
                 {
                     channel._state = IrcChannel.State.WaitingForNames;
                     return;
                 }
             }
             else
             {
                 channel = new IrcChannel(this, args[0]);
                 _channels.Add(args[0], channel);
                 channel._state = IrcChannel.State.WaitingForNames;
                 return;
             }
         }
     }
     else
     {
         lock (_channels)
         {
             IrcChannel channel;
             if (_channels.TryGetValue(args[0], out channel))
             {
                 channel.AddName(client._nick);
                 _channelList.OnUserJoined(channel, channel._userList[client._nick]);
             }
             else
             {
                 throw new InvalidOperationException();
             }
         }
     }
 }
Beispiel #10
0
 public IrcChannelUser(Guid guid, IrcChannel channel)
     : base(channel._connection, guid)
 {
     // TODO: Complete member initialization
     _channel = channel;
 }