/** * Handles Xml packets. * * @param receivedPacket * The packet to handle. */ private void XmlReceived(Data.PenguinPacket receivedPacket) { if (blnIsLogin || blnIsJoin) // If it's not from the login, say "wtf." { HandleLoginXml(receivedPacket); } }
/** * Handles login XML. * * @param receivedPacket * The packet to handle. */ private void HandleLoginXml(Data.PenguinPacket receivedPacket) { switch (receivedPacket.Xml.Name) { case "msg": HandleXmlMsg(receivedPacket); break; } }
/** * Receive callback for the asynchronous socket. * * @param receivedPacket * The packet that was received. */ protected void ReceiveCallback(Data.PenguinPacket receivedPacket) { if (packetReceived != null) { packetReceived(receivedPacket); } if (receivedPacket.Type == Data.PenguinPacket.PacketType.Xt) { HandleXt(receivedPacket); } else if (receivedPacket.Type == Data.PenguinPacket.PacketType.Xml) { XmlReceived(receivedPacket); } }
/** * Handles Xml with the tag name "msg". * * @param receivedPacket * The packet to handle. */ private void HandleXmlMsg(Data.PenguinPacket receivedPacket) { switch (receivedPacket.Xml.ChildNodes[0].Attributes["action"].Value) { case "apiOK": SendRndKRequest(); break; case "apiKO": throw new Exceptions.InvalidAPIException("Invalid API version."); // Only happens if the SFS API version is wrong. I've never known this to happen. case "rndK": string strHash; strRndK = receivedPacket.Xml.ChildNodes[0].InnerText; strHash = (blnIsLogin) ? Security.Crypt.HashPassword(penguinPass, strRndK) : Security.Crypt.RevMd5(loginKey + strRndK, true) + loginKey; SendLogin(penguinName, strHash); break; } }
/** * Handle xt packets. * * @param receivedPacket * The packet to handle. */ private void HandleXt(Data.PenguinPacket receivedPacket) { penguinHandlers.Execute(receivedPacket.Xt.Command, receivedPacket); }