/* 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 ; } }
// :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); */ }
/// <summary> /// Check if "con" is a IRCUserConnection-object /// </smmary> public bool IsUser(IRCConnection con) { return (con.GetType() == typeof(IRCUserConnection)); }
// 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 } }