public virtual void SendWho(IRCUserConnection client, bool only_ops)
        {
            Console.WriteLine(this + ".SendWho()");
            bool is_member, is_visible;

            if (!this.HasConnection(client))
                is_member = false;
            else
                is_member = true;
            #if false
            if (!is_member && this.HasMode('s')) // secret chan
                return; // user is not in the channel -> return
            #endif
            if (is_member || !this.HasMode('s'))
            {
                foreach (SimpleUser usr in this._users)
                {
            //					IRCUserConnection usr = (IRCUserConnection)dict.Value; // TODO: MUSS mal ein SimpleUser sein

                    if (usr.UserMode.HasMode(IRCUserModes.MODE_INVISIBLE))
                        is_visible = false;
                    else
                        is_visible = true;

                    if (is_visible || is_member)
                    {
                    //	if (only_ops && !usr.ChanUserMode.get(this, IRCUserModes.MODE_OP)) // TODO
                    //		continue;

                    //:irc.localhost 352 test #test ~aa localhost irc.localhost test H :0 aa
            //[channel] [user] [host] [server] [nick]( "H" / "G" > ["*"] [ ( "@" / "+" ) ] :[hopcount] [real name]
            //:amd                    352 blackdragon #test    aa    127.0.0.1      amd              blackdragon H :0 aa
            //:example.irc.org 352 blackdragon #test ~aa localhost.tux example.irc.org blackdragon H* :0 aa

                        client.SendCommand(ReplyCodes.RPL_WHOREPLY, client.NickName, this.Name, usr.UserName, "127.0.0.1" /*usr.HostName/*todo*/, this._server.ServerName, usr.NickName, "H"/*( "H" / "G" > ["*"] [ ( "@" / "+" ) ]*/, String.Format("{0} {1}", usr.HopCount, usr.RealName));//, true); // true ein ":" beim letzen parameter
                    }
                }
            }
            client.SendCommand(ReplyCodes.RPL_ENDOFWHO, client.NickName, this.Name, ":End of /WHO list.");
        }
        public virtual void SendNames(IRCUserConnection client)
        {
            string line = ":";
            string[] nicks = this.Nicks;
            for (int j = 0; j < nicks.Length; j++)
            {
                if (j == nicks.Length-1)
                    line += nicks[j];
                else
                    line += nicks[j] + ' ';
            }

            client.SendCommand(ReplyCodes.RPL_NAMREPLY, client.NickName, "=", this.Name, line); // TODO: liste kann zu lang werden
            client.SendCommand(ReplyCodes.RPL_ENDOFNAMES, client.NickName, this.Name, ":End of NAMES list");
        }