public NativeFunction(string name, string args)
 {
     Guid = "";
     Response = 0;
     Name = name;
     Args = args;
     Data = new DataStream();
 }
 public NativeFunction()
 {
     Guid = "";
     Response=0;
     Name = "";
     Args = "";
     Data = new DataStream();
 }
 public void SendNativeFunction(Server server, string guid,string name, string args, DataStream data)
 {
     Log.Debug("SendNativeFunction: "+name);
     Packet sp = new Packet(Packet.Opcodes.FunctionRequest);
     sp.AddString(guid);
     sp.AddString(name); // name
     sp.AddInt32(0); // response
     sp.AddString(args);
     sp.AddData(data.Data,data.Length);
     _Client.SendPacket(server, sp);
 }
        public void ProcessPacket(object args)
        {
            Server server = ((ProcessPacketParams)args).server;
            Packet pak = ((ProcessPacketParams)args).packet;
            if (!server.IsConnected) return;
            //Log.Debug("Packet received: " + pak.Opcode.ToString());

            if (pak.Opcode == (byte)Packet.Opcodes.Auth)
            { // authentication response
                Log.Debug("Auth pak receive");
                bool success = pak.ReadBool();
                if (success) { server.IsAuthenticated = true; Log.Debug("Auth success."); }
                else {server.IsAuthenticated = false; Log.Debug("Auth failed.");}
            }
            if (!server.IsAuthenticated) return;
            if (pak.Opcode == (byte)Packet.Opcodes.Ping)
            {
                _Client.PakSender.SendPingReply(server);
            }

            if (pak.Opcode == (byte)Packet.Opcodes.Callback)
            {
                string callbackname = pak.ReadString();
                Log.Debug("Callback Received: " + callbackname);

                byte[] callbackdata = pak.ReadData(pak.Length - pak.Pos);

                DataStream sdata = new DataStream();
                sdata.Data = callbackdata;
                sdata.Length = (ushort)callbackdata.Length;
                InternalEvents.FireOnCallbackReceived(null, new OnCallbackReceivedEventArgs(server,_Client,callbackname,sdata));

                //return;
            }

            if (pak.Opcode == (byte)Packet.Opcodes.FunctionRequest)
            {
                //Log.Debug("function request received");
                string funcname = pak.ReadString();
                string callbackname = pak.ReadString();
                string paramtypes = pak.ReadString();
                //byte[] funcdata = pak.ReadData(pak.Length - pak.Pos);
                object[] funcparams = new object[paramtypes.Length];

                char[] cparamtypes = paramtypes.ToCharArray();
                for (int i=0;i<paramtypes.Length;i++)
                {
                    switch (cparamtypes[i])
                    {
                        case 'i':
                            funcparams[i] = pak.ReadInt32();
                            break;
                        case 'f':
                            funcparams[i] = pak.ReadFloat32();
                            break;
                        case 's':
                            funcparams[i] = pak.ReadString();
                            break;
                    }
                }

                //DataStream sdata = new DataStream();
                //sdata.Data = funcdata;
                //sdata.Length = (ushort)funcdata.Length;
                //Log.Debug("funcreq: " + funcname);
                InternalEvents.FireOnFunctionRequestReceived(null, new OnFunctionRequestReceivedEventArgs(server, _Client, funcname,callbackname,paramtypes,funcparams));

                //return;
            }

            if (pak.Opcode == (byte)Packet.Opcodes.Test)
            {
                Log.Debug("Packet Test received");
                Log.Debug(pak.ReadString());
                Log.Debug(pak.ReadInt32().ToString());
                Log.Debug(pak.ReadByte().ToString());
                Log.Debug(pak.ReadFloat32().ToString());
                Log.Debug(pak.ReadString());

            }
              // Log.Debug("paklen: "+pak.Data.Length);
            pak.Pos = 0;
            InternalEvents.FireOnPacketReceived(this,new OnPacketReceivedEventArgs(server,_Client,pak));
        }
 public OnCallbackReceivedEventArgs(Server server, Client client, string callbackname, DataStream data)
 {
     _Server = server;
     _Client = client;
     CallbackName = callbackname;
     Data = data;
 }