コード例 #1
0
        /*
        pass-msg:
        pass-msg: pass
        pass-msg: password
        pass-msg: 0211000001
        pass-msg: IRC|aEFJKMRTu
        pass-msg: P
        */
        public virtual void m_pass(IRCConnection connection, string[] ar)
        {
            // TODO: pass ist auch vom clienten möglich!
            Console.WriteLine(this + ": pass message");
            foreach (string s in ar)
            {
                Console.WriteLine("pass-msg: " +s);
            }

            if ((!(connection.GetType() == typeof(IRCConnection))) || ((IRCConnection)connection).PassSet)
            {
                connection.SendLine("ERROR: ERR_ALREADYREGISTRED");//connection.CloseLink(); // TO/DO: CloseLink soll RemoveConnetion in der Server-Klasse ersetzen/erweitern; RemoveConnation bleibt bestehen ruft aber nicht mehr connection.Dispose auf.
                return;
            }
            if (ar.Length < 3)
            {
                connection.SendLine("ERROR: ERR_NEEDMOREPARAMS");
                return;
            }

            if (false) // wenn passwort falsch
            {
                connection.SendLine("ERROR: Wrong Password, clossing link ...");
                this.CloseLink(connection); // CloseLink() kümmert sich um alles
                return;
            }
            ((IRCConnection)connection).PassSet = true;

            if (ar.Length > 3)
            {
                // TODO: TS-Server
                ;
            }
        }
コード例 #2
0
 // :example.irc.org 353 blackdragon = #d :blackdragon
 // :example.irc.org 366 blackdragon #d :End of NAMES list.
 // :example.irc.org 324 blackdragon #d +
 private void m_mode(IRCConnection connection, string[] par)
 {
     //ar[0] =
     //ar[1] = mode
     //ar[2] = #test
     if (connection.GetType() != typeof(IRCUserConnection))
     {
         // ERR
         return;
     }
     IRCUserConnection src = (IRCUserConnection)connection;
     src.SendCommand(ReplyCodes.RPL_CHANNELMODEIS, src.NickName, par[2], "+"); // TODO: ":" weglassen
     /*
     IRCConnection src = (IRCConnection)connection;
     foreach (string l in par)
     {
         Console.WriteLine(l);
     }
     Console.WriteLine("Umodes for "+src.ID+": "+src.UserMode);
     */
 }
コード例 #3
0
 /// <summary>
 /// Check if "con" is a IRCUserConnection-object
 /// </smmary>
 public bool IsUser(IRCConnection con)
 {
     return (con.GetType() == typeof(IRCUserConnection));
 }
コード例 #4
0
        // Command: NAMES
        // Parameters: [ <channel> *( "," <channel> ) [ <target> ] ]
        private void m_names(IRCConnection connection, string[] par)
        {
            if (connection.GetType() != typeof(IRCUserConnection))
            {
                // ERR
                connection.SendLine("ERROR");
                return;
            }
            if (par.Length > 4)
            {
                connection.SendLine("to much parameters"); //
                return;
            }
            IRCUserConnection src = (IRCUserConnection)connection;

            if (par.Length == 4)
            {
                throw new NotImplementedException("NAMES forward");

                // forward the request to another server
                IRCServerConnection[] srvs = this.SearchServer(par[3]);
                if (srvs.Length > 0)
                {
                    // [server name] :No such server
                    src.SendCommand(ReplyCodes.ERR_NOSUCHSERVER, src.NickName, par[3], ":No such server");
                }
                else
                {
                    //srvs[0].SendCommand(srvs.ServerName, src, "NAMES", par[2], par[3]);
                }
                return;
            }
            if (par.Length == 3)
            {
                Channel chan;
                if (par[2].IndexOf(',') != -1)
                {
                    chan = this.GetChannel(par[2]);
                    if (chan != null)
                    {
                        chan.SendNames(src);
                    }
                }
                else
                {
                    string[] chans = par[2].Split(new char[',']);
                    foreach (string schan in chans)
                    {
                        chan = this.GetChannel(schan);
                        if (chan == null)
                        {
                            continue;
                        }
                        chan.SendNames(src);
            #if false
                        src.SendCommand(ReplyCodes.RPL_NAMREPLY, src.NickName, "=", channel.Name, line);
                        src.SendCommand(ReplyCodes.RPL_ENDOFNAMES, src.NickName, channel.Name, ":End of NAMES list");
            #endif
                    }
                }
            }
            else
            {
                foreach (DictionaryEntry entry in this._channels)
                {
                    Channel chan = (Channel)entry.Value;
                    chan.SendNames(src);
                }

            #if false
                // TODO: Nun noch alle Clients ausgeben, die in keinem Channel sind
                //////
                src.SimpleClient.disadvantage++;
                src.SendCommand(ReplyCode.RPL_ENDOFNAMES, src.NickName, "*", ":End of NAMES list");
            #endif
            }
        }