package _-1-S{
import flash.events.EventDispatcher;
import com.sulake.core.runtime.IDisposable;
import flash.net.Socket;
import _-1Sk._SafeStr_1558;
import flash.utils.ByteArray;
import com.sulake.core.utils._SafeStr_1554;
import com.sulake.core.communication._SafeStr_1068;
import flash.utils.Timer;
import _-1ai._SafeStr_1559;
import com.sulake.core.communication.messages._SafeStr_2210;
import com.sulake.core.communication.messages.MessageClassManager;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.events.IOErrorEvent;
import com.sulake.core.communication.messages.IMessageComposer;
import flash.system.Security;
import com.sulake.core.communication.messages.IMessageEvent;
import com.sulake.core.communication.messages._SafeStr_611;
import com.sulake.core.communication.messages._SafeStr_9;
import com.sulake.core.communication.messages._SafeStr_2211;
import com.sulake.core.communication.messages._SafeStr_1560;
public class _SafeStr_1800 extends EventDispatcher implements _SafeStr_612, IDisposable {
private var _SafeStr_2574:Boolean = false;
private var _SafeStr_5722:Socket;
private var _SafeStr_5723:_SafeStr_1558;
private var _SafeStr_5724:ByteArray;
private var _SafeStr_5725:_SafeStr_1554;
private var _SafeStr_2643:String;
private var _SafeStr_5726:_SafeStr_1068;
private var _SafeStr_5727:Timer;
private var _SafeStr_5728:_SafeStr_1559;
private var _SafeStr_5729:_SafeStr_2210;
public function _SafeStr_1800(_arg_1:String, _arg_2:_SafeStr_1068){
_SafeStr_2643 = _arg_1;
_SafeStr_5726 = _arg_2;
_SafeStr_5724 = new ByteArray();
_SafeStr_5729 = new MessageClassManager();
_SafeStr_5722 = new Socket();
_SafeStr_5727 = new Timer(5000, 1);
_SafeStr_5727.addEventListener(TimerEvent.TIMER, _SafeStr_5730);
_SafeStr_5722.addEventListener(Event.CONNECT, _SafeStr_5731);
_SafeStr_5722.addEventListener(Event.COMPLETE, _SafeStr_4043);
_SafeStr_5722.addEventListener(Event.CLOSE, _SafeStr_4565);
_SafeStr_5722.addEventListener(ProgressEvent.SOCKET_DATA, _SafeStr_5732);
_SafeStr_5722.addEventListener(SecurityErrorEvent.SECURITY_ERROR, _SafeStr_5733);
_SafeStr_5722.addEventListener(IOErrorEvent.IO_ERROR, _SafeStr_5734);
}
public function _SafeStr_5735(_arg_1:ByteArray, _arg_2:Boolean=true):Boolean{
if (_SafeStr_5723 != null){
if (_arg_2){
};
};
return (false);
}
private function _SafeStr_5730(_arg_1:TimerEvent):void{
_SafeStr_5727.stop();
Logger.log("[SocketConnection] TimeOut Error");
var _local_2:IOErrorEvent = new IOErrorEvent(IOErrorEvent.IO_ERROR);
_local_2.text = "[Habbo] Socket Timeout Error (5000ms). Possible Firewall prevention.";
dispatchEvent(_local_2);
}
public function _SafeStr_5736(_arg_1:_SafeStr_1558):void{
_SafeStr_5723 = _arg_1;
}
private function _SafeStr_5733(_arg_1:SecurityErrorEvent):void{
_SafeStr_5727.stop();
Logger.log(("[SocketConnection] Security Error: " + _arg_1.text));
dispatchEvent(_arg_1);
}
private function _SafeStr_5731(_arg_1:Event):void{
Logger.log("[SocketConnection] Connected");
_SafeStr_5727.stop();
dispatchEvent(_arg_1);
}
public function send(_arg_1:IMessageComposer, _arg_2:int=-1):Boolean{
var _local_3:ByteArray = new ByteArray();
var _local_4:int = this._SafeStr_5729._SafeStr_5737(_arg_1);
if (_local_4 < 0){
Logger.log(("Could not find registered message composer for " + _arg_1));
return (false);
};
var _local_5:ByteArray = _SafeStr_5728._SafeStr_4865._SafeStr_4425(_local_4, _arg_1._SafeStr_3538(), _arg_2);
if (_SafeStr_5725){
_SafeStr_5725["last_sent_message_time"] = new Date().getTime();
_SafeStr_5725["last_sent_message_data"] = _local_5;
};
if (_SafeStr_5723 != null){
_local_3 = _SafeStr_5723._SafeStr_4416(_local_5);
}
else {
_local_3 = _local_5;
};
Logger.log(("<< [SOCKET]: " + [_local_4, _arg_1._SafeStr_3538(), "->", _local_3]));
if (_SafeStr_5722.connected){
_SafeStr_5722.writeBytes(_local_3);
_SafeStr_5722.flush();
}
else {
Logger.log("[SOCKET] Not connected.");
return (false);
};
return (true);
}
public function init(_arg_1:String, _arg_2:uint=0):Boolean{
if (_SafeStr_5725){
_SafeStr_5725["host_name"] = _arg_1;
_SafeStr_5725["host_port"] = _arg_2;
};
Security.loadPolicyFile(((("xmlsocket://" + _arg_1) + ":") + _arg_2));
_SafeStr_5727.start();
_SafeStr_5722.connect(_arg_1, _arg_2);
return (true);
}
public function _SafeStr_5738(_arg_1:IMessageEvent):void{
_SafeStr_5726._SafeStr_5739(_SafeStr_2643, _arg_1);
}
private function _SafeStr_5732(_arg_1:ProgressEvent):void{
var _local_5:Array;
var _local_6:int;
var _local_7:ByteArray;
var _local_8:Array;
var _local_9:Array;
var _local_10:Class;
var _local_11:IMessageEvent;
var _local_12:Array;
var _local_13:Class;
var _local_14:ByteArray;
var _local_15:_SafeStr_611;
var _local_16:_SafeStr_9;
var _local_17:ByteArray;
while (_SafeStr_5722.bytesAvailable > 0) {
_SafeStr_5724.writeByte(_SafeStr_5722.readUnsignedByte());
};
Logger.log((">>[SOCKET]: " + _SafeStr_5724.toString()));
var _local_2:Array = new Array();
var _local_3:uint = _SafeStr_5728._SafeStr_4863(_SafeStr_5724, _local_2);
var _local_4:Number = new Date().getTime();
for each (_local_5 in _local_2) {
_local_6 = (_local_5[0] as int);
_local_7 = (_local_5[1] as ByteArray);
if (_SafeStr_5725){
_SafeStr_5725["last_received_message_time"] = _local_4;
_SafeStr_5725["last_received_message_data"] = ((_local_6 + " ") + _local_7);
};
Logger.log((((">>[SocketConnection] Received message id: " + _local_6) + " data: ") + _local_7.toString()));
_local_8 = _SafeStr_5729._SafeStr_5740(_local_6);
_local_9 = new Array();
for each (_local_10 in _local_8) {
_local_12 = _SafeStr_5726._SafeStr_5741(this, _local_10);
_local_9 = _local_9.concat(_local_12);
};
if (_local_9.length == 0){
Logger.log((">>[SocketConnection] No message event listeners defined for id: " + _local_6));
};
for each (_local_11 in _local_9) {
_local_13 = _local_11._SafeStr_5742;
if (_local_13 == null){
Logger.log((">>[SocketConnection] Message Event Has no parser defined, use annotation?: " + [_local_6, _local_11]));
}
else {
_local_14 = new ByteArray();
_local_14.writeBytes(_local_7);
_local_14.position = _local_7.position;
_local_11._SafeStr_5743 = this;
_local_15 = new _SafeStr_2211(_local_14, _SafeStr_5744._SafeStr_4864);
_local_16 = _SafeStr_5726._SafeStr_5745(_local_13);
if (!_local_16.flush()){
Logger.log((">>[SocketConnection] Message Event Parser wasn't flushed: " + [_local_6, _local_13, _local_16]));
}
else {
if (_local_16._SafeStr_2598(_local_15)){
_local_11.parser = _local_16;
_local_11.callback.call(null, _local_11);
}
else {
Logger.log((">>[SocketConnection] Could not parse message: " + [_local_6, _local_10, _local_11]));
};
};
};
};
};
if (_local_3 == _SafeStr_5724.length){
_SafeStr_5724 = new ByteArray();
}
else {
if (_local_3 > 0){
_local_17 = new ByteArray();
_local_17.writeBytes(_SafeStr_5724, _local_3);
_SafeStr_5724 = _local_17;
Logger.log(((("[SOCKET REST] offset: " + _local_3) + " rest: ") + _SafeStr_5724.toString()));
};
};
}
public function get _SafeStr_5744():_SafeStr_1559{
return (_SafeStr_5728);
}
public function set _SafeStr_5746(_arg_1:_SafeStr_1554):void{
_SafeStr_5725 = _arg_1;
}
public function get disposed():Boolean{
return (_SafeStr_2574);
}
public function get _SafeStr_5746():_SafeStr_1554{
return (_SafeStr_5725);
}
public function dispose():void{
_SafeStr_2574 = true;
_SafeStr_5722 = null;
_SafeStr_5724 = null;
_SafeStr_5725 = null;
_SafeStr_5723 = null;
_SafeStr_5728 = null;
_SafeStr_2643 = null;
_SafeStr_5729 = null;
_SafeStr_5726 = null;
}
public function set _SafeStr_5744(_arg_1:_SafeStr_1559):void{
_SafeStr_5728 = _arg_1;
}
public function _SafeStr_5747(_arg_1:_SafeStr_1560):void{
_SafeStr_5729._SafeStr_5748(_arg_1);
}
private function _SafeStr_4043(_arg_1:Event):void{
_SafeStr_5727.stop();
Logger.log("[SocketConnection] Complete");
dispatchEvent(_arg_1);
}
private function _SafeStr_5734(_arg_1:IOErrorEvent):void{
_SafeStr_5727.stop();
Logger.log(("[SocketConnection] IO Error: " + _arg_1.text));
switch (_arg_1.type){
case IOErrorEvent.IO_ERROR:
break;
case IOErrorEvent.DISK_ERROR:
break;
case IOErrorEvent.NETWORK_ERROR:
break;
case IOErrorEvent.VERIFY_ERROR:
break;
};
dispatchEvent(_arg_1);
}
private function _SafeStr_4565(_arg_1:Event):void{
_SafeStr_5727.stop();
Logger.log("[SocketConnection] Closed");
dispatchEvent(_arg_1);
}
override public function toString():String{
var _local_1 = "";
var _local_2 = "";
_local_1 = (_local_1 + "Socket Connection: \n");
_local_1 = (_local_1 + (("Protocol Encoder: " + _SafeStr_5728._SafeStr_4865) + "\n"));
_local_1 = (_local_1 + (("Protocol Decoder: " + _SafeStr_5728._SafeStr_4864) + "\n"));
return ((_local_1 + (("Encryption: " + _SafeStr_5723) + "\n")));
}
}
}//package _-1-S