/// <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; } }
/// <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("<", "<"); message = message.Replace(">", ">"); 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); }
/// <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()); }
/// <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; }
/// <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; }