Advertisement
iJakep

Connection

Apr 5th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class com.clubpenguin.net.Connection extends XMLSocket implements com.clubpenguin.net.IConnection
  2.     {
  3.         var _responded, onConnect, onData, onXML, onClose, messageHandlers, arrayTags, disabledCommands, ipAddress, port, socketConnectionTimeoutThread, onConnection, close, activeRoomId, roomList, buddyList, myBuddyVars, myUserId, myUserName, playerId, amIModerator, onConnectionLost;
  4.         function Connection () {
  5.             super();
  6.             initialize();
  7.             _responded = new org.osflash.signals.Signal(String, Array);
  8.             onConnect = connectionEstablished;
  9.             onData = gotData;
  10.             onXML = xmlReceived;
  11.             onClose = connectionClosed;
  12.             messageHandlers = new Object();
  13.             setupMessageHandlers();
  14.             arrayTags = {uLs:true, rmList:true, vars:true, bList:true, vs:true, mv:true};
  15.             disabledCommands = [];
  16.         }
  17.         function getResponded() {
  18.             return(_responded);
  19.         }
  20.         function login(zone, name, pass) {
  21.             var _local3 = {t:"sys"};
  22.             var _local2 = ((((("<login z='" + zone) + "'><nick><![CDATA[") + name) + "]]></nick><pword><![CDATA[") + pass) + "]]></pword></login>";
  23.             send(_local3, "login", 0, _local2);
  24.         }
  25.         function connect(ipAdr, port) {
  26.             if (!isConnected) {
  27.                 ipAddress = ipAdr;
  28.                 this.port = port;
  29.                 super.connect(ipAdr, port);
  30.                 socketConnectionTimeoutThread = setInterval(com.clubpenguin.util.Delegate.create(this, socketTimeoutHandler), socketConnectionTimeout);
  31.             }
  32.         }
  33.         function xmlReceived(message) {
  34.             var _local2 = new Object();
  35.             message2Object(message.childNodes, _local2);
  36.             if (debug) {
  37.             }
  38.             var _local3 = _local2.msg.attributes.t;
  39.             messageHandlers[_local3].handleMessage(_local2.msg.body, this, "xml");
  40.         }
  41.         function socketTimeoutHandler() {
  42.             if (socketConnectionTimeoutThread != null) {
  43.                 clearInterval(socketConnectionTimeoutThread);
  44.                 delete socketConnectionTimeoutThread;
  45.             }
  46.             preConnection = false;
  47.             onConnection(false);
  48.             close();
  49.         }
  50.         function getRandomKey() {
  51.             send({t:"sys"}, "rndK", -1, "");
  52.         }
  53.         function disconnect() {
  54.             close();
  55.             isConnected = false;
  56.             initialize();
  57.         }
  58.         function connected() {
  59.             return(isConnected);
  60.         }
  61.         function message2Object(xmlNodes, parentObj) {
  62.             var _local8 = 0;
  63.             var _local3 = null;
  64.             while (_local8 < xmlNodes.length) {
  65.                 var _local4 = xmlNodes[_local8];
  66.                 var _local5 = _local4.nodeName;
  67.                 var _local6 = _local4.nodeValue;
  68.                 if (parentObj instanceof Array) {
  69.                     _local3 = {};
  70.                     parentObj.push(_local3);
  71.                     _local3 = parentObj[parentObj.length - 1];
  72.                 } else {
  73.                     parentObj[_local5] = new Object();
  74.                     _local3 = parentObj[_local5];
  75.                 }
  76.                 for (var _local11 in _local4.attributes) {
  77.                     if (typeof(_local3.attributes) == "undefined") {
  78.                         _local3.attributes = {};
  79.                     }
  80.                     var _local2 = _local4.attributes[_local11];
  81.                     if (!isNaN(Number(_local2))) {
  82.                         _local2 = Number(_local2);
  83.                     }
  84.                     if (_local2.toLowerCase() == "true") {
  85.                         _local2 = true;
  86.                     } else if (_local2.toLowerCase() == "false") {
  87.                         _local2 = false;
  88.                     }
  89.                     _local3.attributes[_local11] = _local2;
  90.                 }
  91.                 if (arrayTags[_local5]) {
  92.                     _local3[_local5] = [];
  93.                     _local3 = _local3[_local5];
  94.                 }
  95.                 if (_local4.hasChildNodes() && (_local4.firstChild.nodeValue == undefined)) {
  96.                     var _local9 = _local4.childNodes;
  97.                     message2Object(_local9, _local3);
  98.                 } else {
  99.                     _local6 = _local4.firstChild.nodeValue;
  100.                     if (((!isNaN(_local6)) && (_local4.nodeName != "txt")) && (_local4.nodeName != "var")) {
  101.                         _local6 = Number(_local6);
  102.                     }
  103.                     _local3.value = _local6;
  104.                 }
  105.                 _local8++;
  106.             }
  107.         }
  108.         function makeHeader(headerObj) {
  109.             var _local2 = "<msg";
  110.             for (var _local3 in headerObj) {
  111.                 _local2 = _local2 + ((((" " + _local3) + "='") + headerObj[_local3]) + "'");
  112.             }
  113.             _local2 = _local2 + ">";
  114.             return(_local2);
  115.         }
  116.         function closeHeader() {
  117.             return("</msg>");
  118.         }
  119.         function send(header, action, fromRoom, message) {
  120.             var _local3 = makeHeader(header);
  121.             _local3 = _local3 + ((((((("<body action='" + action) + "' r='") + fromRoom) + "'>") + message) + "</body>") + closeHeader());
  122.             if (debug) {
  123.             }
  124.             super.send(_local3);
  125.         }
  126.         function sendXtMessage(xtName, cmdName, paramObj, type, roomId) {
  127.             var _local3 = cmdName.split("#")[1];
  128.             var _local2 = 0;
  129.             while (_local2 < disabledCommands.length) {
  130.                 if (disabledCommands[_local2] == _local3) {
  131.                     return(undefined);
  132.                 }
  133.                 _local2++;
  134.             }
  135.             if (roomId == undefined) {
  136.                 roomId = activeRoomId;
  137.             }
  138.             if (type == undefined) {
  139.                 type = "str";
  140.             }
  141.             if (type == "str") {
  142.                 var _local5;
  143.                 _local5 = (((((((rawProtocolSeparator + "xt") + rawProtocolSeparator) + xtName) + rawProtocolSeparator) + cmdName) + rawProtocolSeparator) + roomId) + rawProtocolSeparator;
  144.                 _local2 = 0;
  145.                 while (_local2 < paramObj.length) {
  146.                     _local5 = _local5 + (paramObj[_local2].toString() + rawProtocolSeparator);
  147.                     _local2++;
  148.                 }
  149.                 sendString(_local5);
  150.             }
  151.         }
  152.         function initialize(isLogout) {
  153.             if (isLogout == undefined) {
  154.                 isLogout = false;
  155.             }
  156.             roomList = {};
  157.             buddyList = [];
  158.             myBuddyVars = [];
  159.             activeRoomId = null;
  160.             myUserId = null;
  161.             myUserName = "";
  162.             playerId = null;
  163.             changingRoom = false;
  164.             amIModerator = false;
  165.             if (!isLogout) {
  166.                 isConnected = false;
  167.             }
  168.         }
  169.         function sendString(message) {
  170.             if (debug) {
  171.             }
  172.             super.send(message);
  173.         }
  174.         function connectionEstablished(ok) {
  175.             if (ok) {
  176.                 if (socketConnectionTimeoutThread != null) {
  177.                     clearInterval(socketConnectionTimeoutThread);
  178.                     delete socketConnectionTimeoutThread;
  179.                 }
  180.                 preConnection = false;
  181.                 var _local3 = {t:"sys"};
  182.                 var _local2 = ((("<ver v='" + majVersion.toString()) + minVersion.toString()) + subVersion.toString()) + "' />";
  183.                 send(_local3, "verChk", 0, _local2);
  184.             }
  185.         }
  186.         function connectionClosed() {
  187.             isConnected = false;
  188.             if (preConnection) {
  189.                 connectionEstablished(false);
  190.             } else {
  191.                 initialize();
  192.                 onConnectionLost();
  193.             }
  194.         }
  195.         function gotData(message) {
  196.             if (message.charAt(0) == rawProtocolSeparator) {
  197.                 strReceived(message);
  198.             } else if (message.charAt(0) == "<") {
  199.                 onXML(new XML(message));
  200.             }
  201.         }
  202.         function strReceived(message) {
  203.             var _local4 = message.substr(1, message.length - 2).split(rawProtocolSeparator);
  204.             var _local3 = _local4[1];
  205.             var _local7 = _local4.slice(2);
  206.             var _local2 = 0;
  207.             while (_local2 < disabledCommands.length) {
  208.                 if (_local3 == disabledCommands[_local2]) {
  209.                     return(undefined);
  210.                 }
  211.                 _local2++;
  212.             }
  213.             if (debug) {
  214.             }
  215.             var _local6 = _local4[0];
  216.             _responded.dispatch(_local3, _local7);
  217.             messageHandlers[_local6].handleMessage(_local4.splice(1, _local4.length - 1), this, "str");
  218.         }
  219.         function setupMessageHandlers() {
  220.             addMessageHandler("sys", handleSysMessages);
  221.             addMessageHandler("xt", com.clubpenguin.util.Delegate.create(this, handleExtensionMessages));
  222.         }
  223.         function addMessageHandler(handlerId, handlerMethod) {
  224.             if (messageHandlers[handlerId] == undefined) {
  225.                 messageHandlers[handlerId] = new Object();
  226.                 messageHandlers[handlerId].handleMessage = handlerMethod;
  227.             }
  228.         }
  229.         function handleExtensionMessages(dataObj, scope, type) {
  230.             if (type == undefined) {
  231.                 type = "xml";
  232.             }
  233.             if (type == "xml") {
  234.                 var _local6 = dataObj.attributes.action;
  235.                 var _local7 = dataObj.attributes.r;
  236.                 if (_local6 == "xtRes") {
  237.                     var _local4 = dataObj.value;
  238.                     var _local5 = scope.os.deserialize(_local4);
  239.                     scope.onExtensionResponse(_local5, type);
  240.                 }
  241.             } else if (type == "str") {
  242.                 scope.onExtensionResponse(dataObj, type);
  243.             } else if (type == "json") {
  244.                 scope.onExtensionResponse(dataObj.o, type);
  245.             }
  246.         }
  247.         function handleSysMessages(xmlObj, scope) {
  248.             var _local1 = xmlObj.attributes.action;
  249.             var _local5 = xmlObj.attributes.r;
  250.             if (_local1 == "apiOK") {
  251.                 scope.isConnected = true;
  252.                 scope.onConnection(true);
  253.             } else if (_local1 == "rndK") {
  254.                 var _local2 = xmlObj.k.value;
  255.                 scope.onRandomKey(_local2);
  256.             }
  257.         }
  258.         function disableCommands(disabledCommands) {
  259.             this.disabledCommands = disabledCommands;
  260.         }
  261.         function enableCommands() {
  262.             disabledCommands = [];
  263.         }
  264.         var isConnected = false;
  265.         var changingRoom = false;
  266.         var preConnection = true;
  267.         var majVersion = 1;
  268.         var minVersion = 5;
  269.         var subVersion = 3;
  270.         var rawProtocolSeparator = "%";
  271.         var socketConnectionTimeout = 30000;
  272.         var debug = true;
  273.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement