public static void HandleXTPacket(Penguin peng) { try { if (peng.clientData == null) { return; } var category = peng.clientData[0]; var handler = peng.clientData[1]; var vars = new List <string> { }; for (var i = 2; i < peng.clientData.length; i++) { vars.Add(peng.clientData[i]); } var callbackHandlerName = String.Format("#xt{0}-{1}/", category, handler); Airtower.getCurrentAirtower().updateListeners(callbackHandlerName, new { client = peng }, vars.ToArray()); } catch (Exception) { } }
protected void receiveDataFromClient(IAsyncResult datas) { int bytesReceived; try { bytesReceived = ((Socket)datas.AsyncState).EndReceive(datas); } catch { return; } if (bytesReceived > 0) { string data = ASCIIEncoding.ASCII.GetString(this.buffer, 0, bytesReceived); Boolean isPartial = this.checkForPartialData(data); if (!isPartial) { // \x00 Null byte in last index, remove it. string partialdata = this.partialBuffer.ToString(); string[] packet = partialdata.Split(char.Parse("\x00")); this.partialBuffer.Clear(); for (int i = 0; i < packet.Length - 1; i++) { string _loc1_ = packet[i]; var parse = Packets.Parse(_loc1_, this); if (parse == Packets.InvalidPacket) { // Better to remove that penguin Log.Debugger.CallEvent(Airtower.ERROR_EVENT, "Incorrect Packet : " + _loc1_); Airtower.disposeClient(false, this.socket); break; } // handle packets acc to received, if xt or xml if (parse == Packets.XT_DATA) { Log.Debugger.CallEvent(Airtower.XT_EVENT, _loc1_); Packets.HandleXTPacket(this); } else if (parse == Packets.XML_DATA) { Log.Debugger.CallEvent(Airtower.XML_EVENT, _loc1_); if (_loc1_ == "<policy-file-request/>") { this.send(String.Format("<cross-domain-policy><allow-access-from domain='*'" + " to-ports='{0}' /></cross-domain-policy>", Airtower.getCurrentAirtower().PORT)); return; } Packets.HandleXMLPacket(this); } } } this.RecvDataEvent.Set(); } else { Airtower.disposeClient(false, this.socket); } }