this is the adobe air server script you can host if you forward port 7777,you can probably take from that script to make it work for you if you read it abit and start the right functions.
PHP Code:
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.ServerSocketConnectEvent;
import flash.net.ServerSocket;
import flash.net.Socket;
import flash.utils.ByteArray;
import flash.net.FileReference;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
var serverSocket:ServerSocket = new ServerSocket();
var clientSocket:Socket;
var clientObject = {};
var pid:Number=0;
var _function:String;
var completeString:String;
var parsedString:String;
var fr:FileReference = new FileReference();
var FileName:URLLoader;
var f:File = new File();
var fs:FileStream;
var fr2:FileReference = new FileReference();
var FileName2:URLLoader;
var f2:File = new File();
var fs2:FileStream;
var memberPackages=["001",28,"Digital Goods 001",31,"Digital Goods 002",93,"Digital Goods 003",365];
function register_account(a,b){
if(a!=undefined&&b!=undefined){
FileName=new URLLoader();
f=File.documentsDirectory;
f=f.resolvePath("storage_lock/paypal/"+a+".txt");
if(f.exists){
if(b.split("mc_gross=")[1].split('.')[0]=="-0"&&f.size!=0){
fs = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeUTFBytes("");
fs.close();
trace("negative");
MovieClip(root.parent).modify_membership_for(memberPackages[memberPackages.indexOf(b.split("item_number=")[1].split("~")[0])+1],b.split("custom=")[1].split("~")[0],true)
}
}else{
fs = new FileStream();
fs.open(f, FileMode.WRITE);
fs.writeUTFBytes(b);
fs.close();
if(b.split("custom=")[1].split("~")[0]!=b){
MovieClip(root.parent).modify_membership_for(memberPackages[memberPackages.indexOf(b.split("item_number=")[1].split("~")[0])+1],b.split("custom=")[1].split("~")[0],false)
}
}
//do something at end?
}else{
}
}
function load_new_player(a,b){
trace("Current port set");
currentPort=a;
bind();
}
var generatedNumber:String;
function randomRange(minNum:Number,maxNum:Number):Number{
return (Math.floor(Math.random()*(maxNum - minNum + 1))+minNum);
}
function onConnection(e:ServerSocketConnectEvent){
pid++;
clientSocket = e.socket;
clientSocket.addEventListener(ProgressEvent.SOCKET_DATA, onClientSocketData);
clientObject[(clientSocket.remoteAddress).toString()+":"+(clientSocket.remotePort).toString()] = {"pid":pid, connection:e.socket, "msg_num":0,paypal_vars:""};
log("in connected" + pid + (clientSocket.remoteAddress).toString() + "_" +(clientSocket.remotePort).toString());
}
var msg_num:Number=0;
var nullByte:String="";
var temp_name="";
var error_log="";
var ipn_vars:Array =new Array();
var _functionList = {"name":null,"register":null,"path":null,"tokens2":null,"mapsize":null,"loadmap":null};
function onClientSocketData(e:ProgressEvent){
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].msg_num++;
var buffer:ByteArray = new ByteArray();
var temp_Bytes:ByteArray= new ByteArray();
e.currentTarget.readBytes(buffer, 0, e.currentTarget.bytesAvailable);
try{
completeString = buffer.toString();
for(var bu=0;bu<completeString.toString().split(nullByte).length;bu++){
parsedString=completeString.toString().split(nullByte)[bu];
if((e.currentTarget.remoteAddress).toString()=="173.0.81.1"){
_function = parsedString.toString().split(";")[0];
ipn_vars=[];
_function=_function.toString().split("\n")[_function.toString().split("\n").length-1];
ipn_vars=_function.toString().split("&");
for(var i=0;i<ipn_vars.length;i++){
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars+=ipn_vars[i]+'~';
}
if(clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("parent_txn_id=")[1]!=undefined){
register_account(clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("parent_txn_id=")[1].split('~')[0]+"_"+clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("first_name=")[1].split('~')[0],clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars);
}else{
register_account(clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("txn_id=")[1].split('~')[0]+"_"+clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars.split("first_name=")[1].split('~')[0],clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].paypal_vars);
}
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].connection.writeUTFBytes("http 200" + nullByte);
clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].connection.flush();
}
}
}catch(e:Error){
}
if((e.currentTarget.remoteAddress).toString()=="173.0.81.1"){
trace("closed");
e.currentTarget.flush();
delete clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()];
e.currentTarget.close();
}
if(msg_num==0){
trace("null byte ready");
nullByte=buffer.toString();
msg_num++;
socket.close();
MovieClip(root.parent).serverReply("Hey how do you do, I have opened port: " + "*"+currentPort+"*" + " for you.");
}
if(_functionList[_function] != null){
log("out end " + clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()].pid);
delete clientObject[(e.currentTarget.remoteAddress).toString()+":"+(e.currentTarget.remotePort).toString()];
e.currentTarget.close();
}
}
var socket:XMLSocket;
var currentPort:Number=7777;
function bind(){
if(serverSocket.bound){
serverSocket.close();
serverSocket = new ServerSocket();
}
serverSocket.bind(currentPort);
serverSocket.addEventListener(ServerSocketConnectEvent.CONNECT, onConnection);
serverSocket.listen();
log("socket ready @: " + serverSocket.localAddress + ":" + serverSocket.localPort);
//null byte creator//
socket = new XMLSocket();
socket.connect("127.0.0.1",currentPort);//107.205.162.59
socket.send("");
}
function broadcast(a){
for(var od in clientObject){
if(clientObject[od].msg_num > 2 && clientObject[od].connection.connected){
trace("broadcasting " +a);
clientObject[od].connection.writeUTFBytes(a + nullByte);
clientObject[od].connection.flush();
}
}
}
function log(a){
trace(a);
}