Ejemplo n.º 1
0
        /// <summary>
        /// Converts a string into a useable dAmn packet.
        /// </summary>
        /// <param name="data">Data to parse.</param>
        /// <returns>dAmnPacket.</returns>
        public static dAmnPacket Parse(string data)
        {
            if (data == null)
                throw new ArgumentNullException("data");

            string orig_data = data;
            try
            {
                data = dAmnServerPacket.ProcessTabLumps(data);
                dAmnPacket p = new dAmnPacket();
                int i = data.IndexOf('\n');
                if (i < 0)
                    throw new Exception("Parser error, No line break.");
                string tmp = data.Substring(0, i);
                p.cmd = tmp.Split(' ')[0];
                int j = tmp.IndexOf(' ');
                if (j > 0)
                    p.param = tmp.Substring(j + 1);
                p.argsAndBody = dAmnArgs.getArgsNData(data.Substring(i + 1));
                p.raw = data;
                return p;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Send a say packet.
        /// </summary>
        /// <param name="ns">Channel to send to.</param>
        /// <param name="message">Message to say.</param>
        public void Say(string ns, string message)
        {            
            // determine message type
            string type = "msg";
            if (message.StartsWith("/me"))
            {
                type = "action";
                message = message.Substring("/me ".Length); // strip /me from the string
            }
            else if (message.StartsWith("/npmsg"))
            {
                type = "npmsg";
                message = message.Substring("/npmsg ".Length); // strip /npmsg from the string
            }

            // replace illegal characters
            message = message.Replace("&lt;", "<");
            message = message.Replace("&gt;", ">");
            message = message.Trim();

            // get chatroom name
            ns = FormatChat(ns);

            // send packet
            dAmnPacket packet = new dAmnPacket
            {
                cmd = "send",
                param = ns,
                body = type + " main\n\n" + message
            };
            Send(packet);             
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Method that sends the packets to the dAmn server.
 /// </summary>
 /// <param name="packet">Packet to send.</param>
 public void Send(dAmnPacket packet)
 {
     Send(packet.ToString());
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Parses packet header to determine what the type is.
        /// </summary>
        /// <param name="packet">Packet to parse.</param>
        /// <returns>Packet type.</returns>
        public static dAmnPacketType ParsedAmnPacketType(dAmnPacket packet)
        {
            // get packet header
            string[] tokens = packet.raw.Split(new string[] { "\n\n" }, StringSplitOptions.None);
            string header = tokens[0];

            // get each line
            string[] lines = header.Split('\n');
            string pktId = lines[0];
            string[] tmp = pktId.Split(new char[]{ ':' }, 2);
            if (tmp[0].ToLower() == "recv chat")
            {
                dAmnPacket subPacket = dAmnServerPacket.Parse(packet.body);
                if (subPacket.cmd == "msg")
                {
                    return dAmnPacketType.Chat;
                }
                else if (subPacket.cmd == "action")
                {
                    return dAmnPacketType.Action;
                }
                else if (subPacket.cmd == "join")
                {
                    return dAmnPacketType.MemberJoin;
                }
                else if (subPacket.cmd == "part")
                {
                    return dAmnPacketType.MemberPart;
                }
                else if (subPacket.cmd == "privchg")
                {
                    return dAmnPacketType.PrivChange;
                }
                else if (subPacket.cmd == "kicked")
                {
                    return dAmnPacketType.MemberKick;
                }
                else if (subPacket.cmd == "admin")
                {
                    if (subPacket.param == "create")
                        return dAmnPacketType.AdminCreate;
                    else if (subPacket.param == "update")
                        return dAmnPacketType.AdminUpdate;
                    else if (subPacket.param == "rename")
                        return dAmnPacketType.AdminRename;
                    else if (subPacket.param == "move")
                        return dAmnPacketType.AdminMove;
                    else if (subPacket.param == "remove")
                        return dAmnPacketType.AdminRemove;
                    else if (subPacket.param == "show")
                        return dAmnPacketType.AdminShow;
                    else if (subPacket.param == "privclass")
                        return dAmnPacketType.AdminError;
                    else
                        return dAmnPacketType.Unknown;
                }
                else
                {
                    return dAmnPacketType.Unknown;
                }
            }
            else if (tmp[0].ToLower() == "recv pchat")
            {
                return dAmnPacketType.Chat;
            }
            else if (tmp[0].ToLower() == "disconnect")
            {
                return dAmnPacketType.Disconnect;
            }
            else if (tmp[0].ToLower() == "join chat")
            {
                return dAmnPacketType.Join;
            }
            else if (tmp[0].ToLower() == "part chat")
            {
                return dAmnPacketType.Part;
            }
            else if (tmp[0].ToLower() == "kicked chat")
            {
                return dAmnPacketType.Kicked;
            }
            else if (tmp[0].ToLower() == "kicked pchat")
            {
                return dAmnPacketType.Kicked;
            }
            else if (tmp[0].ToLower() == "send chat")
            {
                return dAmnPacketType.ErrorSend;
            }
            else if (tmp[0].ToLower() == "send pchat")
            {
                return dAmnPacketType.ErrorSend;
            }
            else if (tmp[0].ToLower() == "kick chat")
            {
                return dAmnPacketType.ErrorKick;
            }
            else if (tmp[0].ToLower() == "kick pchat")
            {
                return dAmnPacketType.ErrorKick;
            }
            else if (tmp[0].ToLower() == "get pchat")
            {
                return dAmnPacketType.ErrorGet;
            }
            else if (tmp[0].ToLower() == "set pchat")
            {
                return dAmnPacketType.ErrorSet;
            }
            else if (tmp[0].ToLower() == "kill login")
            {
                return dAmnPacketType.ErrorKill;
            }
            else if (tmp[0].ToLower() == "property login")
            {
                return dAmnPacketType.Whois;
            }
            else if (tmp[0] == "property chat")
            {
                tmp = lines[1].Split(new char[] { '=' }, 2);
                if (tmp[0] == "p" & tmp[1] == "topic")
                {
                    return dAmnPacketType.Topic;
                }
                else if (tmp[0] == "p" & tmp[1] == "title")
                {
                    return dAmnPacketType.Title;
                }
                else if (tmp[0] == "p" & tmp[1] == "privclasses")
                {
                    return dAmnPacketType.PrivClasses;
                }
                else if (tmp[0] == "p" & tmp[1] == "members")
                {
                    return dAmnPacketType.MemberList;
                }
                else
                {
                    return dAmnPacketType.Unknown;
                }
            }
            else if (tmp[0] == "property pchat")
            {
                tmp = lines[1].Split(new char[] { '=' }, 2);
                if (tmp[0] == "p" & tmp[1] == "members")
                {
                    return dAmnPacketType.MemberList;
                }
                else if (tmp[0] == "p" & tmp[1] == "title")
                {
                    return dAmnPacketType.Title;
                }
                else if (tmp[0] == "p" & tmp[1] == "topic")
                {
                    return dAmnPacketType.Topic;
                }
                else if (tmp[0] == "p" & tmp[1] == "privclasses")
                {
                    return dAmnPacketType.PrivClasses;
                }
                else
                {
                    return dAmnPacketType.Unknown;
                }
            }
            else if (pktId == "ping")
            {
                return dAmnPacketType.Ping;
            }
            return dAmnPacketType.Unknown;
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Constructor. Load this packet with info from another packet.
 /// </summary>
 /// <param name="packet">Packet to copy data from.</param>
 public dAmnServerPacket(dAmnPacket packet)
 {
     this.cmd = packet.cmd;
     this.param = packet.param;
     this.args = packet.args;
     this.body = packet.body;
     this.raw = packet.raw;
 }