2024-04-24 10:25:44 +08:00
|
|
|
#pragma once
|
|
|
|
|
#include "squirrel.h"
|
|
|
|
|
#include "sqstdaux.h"
|
|
|
|
|
#include "sqstdblob.h"
|
|
|
|
|
#include "sqstdio.h"
|
|
|
|
|
#include "sqstdmath.h"
|
|
|
|
|
#include "sqstdstring.h"
|
|
|
|
|
#include "sqstdsystem.h"
|
|
|
|
|
#include "import.h"
|
|
|
|
|
#include "inline_hook.h"
|
|
|
|
|
#include "Singleton.h"
|
|
|
|
|
#include "./sdk/sdk_class.h"
|
|
|
|
|
#include "utils.h"
|
|
|
|
|
#include "GameDataManager.h"
|
|
|
|
|
#include "PacketBuf.h"
|
|
|
|
|
#include "User.h"
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
|
|
|
|
static SQInteger Packet_New(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)PacketGuard::NewPacketGuard();
|
|
|
|
|
sq_pushuserpointer(v, Pck);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Put_header(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQInteger Header1;
|
|
|
|
|
sq_getinteger(v, 3, &Header1);
|
|
|
|
|
SQInteger Header2;
|
|
|
|
|
sq_getinteger(v, 4, &Header2);
|
|
|
|
|
Pck->put_header(Header1, Header2);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Put_byte(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQInteger Byte;
|
|
|
|
|
sq_getinteger(v, 3, &Byte);
|
|
|
|
|
Pck->put_byte(Byte);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Put_short(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQInteger Short;
|
|
|
|
|
sq_getinteger(v, 3, &Short);
|
|
|
|
|
Pck->put_short(Short);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Put_int(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQInteger Int;
|
|
|
|
|
sq_getinteger(v, 3, &Int);
|
|
|
|
|
Pck->put_int(Int);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Put_binary(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
const SQChar *Str;
|
|
|
|
|
sq_getstring(v, 3, &Str);
|
|
|
|
|
Pck->put_str((char *)Str, strlen(Str));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2024-07-22 19:26:56 +08:00
|
|
|
static SQInteger Packet_Put_binaryex(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQUserPointer Str;
|
|
|
|
|
sq_getuserpointer(v, 3, &Str);
|
|
|
|
|
SQInteger Len;
|
|
|
|
|
sq_getinteger(v, 4, &Len);
|
|
|
|
|
Pck->put_binary((char *)Str, Len);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2024-04-24 10:25:44 +08:00
|
|
|
static SQInteger Packet_Finalize(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
SQBool B;
|
|
|
|
|
sq_getbool(v, 3, &B);
|
|
|
|
|
Pck->finalize(B);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Send(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer userbuf;
|
|
|
|
|
sq_getuserpointer(v, 2, &userbuf);
|
|
|
|
|
CUser *user = (CUser *)userbuf;
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 3, &Buf);
|
|
|
|
|
user->Send((PacketGuard *)Buf);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
static SQInteger Packet_Delete(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
SQUserPointer Buf;
|
|
|
|
|
sq_getuserpointer(v, 2, &Buf);
|
|
|
|
|
InterfacePacketBuf *Pck = (InterfacePacketBuf *)Buf;
|
|
|
|
|
InterfacePacketBuf::DelPacketBuf(Pck);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static SQInteger register_Packet_func(HSQUIRRELVM v, SQFUNCTION f, const char *fname)
|
|
|
|
|
{
|
|
|
|
|
sq_pushroottable(v);
|
|
|
|
|
sq_pushstring(v, fname, -1);
|
|
|
|
|
sq_newclosure(v, f, 0); // create a new function
|
|
|
|
|
sq_newslot(v, -3, SQFalse);
|
|
|
|
|
sq_pop(v, 1); // pops the root table
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void RegisterPacket(HSQUIRRELVM v)
|
|
|
|
|
{
|
|
|
|
|
register_Packet_func(v, Packet_New, _SC("Sq_Packet_New"));
|
|
|
|
|
register_Packet_func(v, Packet_Put_header, _SC("Sq_Packet_Put_header"));
|
|
|
|
|
register_Packet_func(v, Packet_Put_byte, _SC("Sq_Packet_Put_byte"));
|
|
|
|
|
register_Packet_func(v, Packet_Put_short, _SC("Sq_Packet_Put_short"));
|
|
|
|
|
register_Packet_func(v, Packet_Put_int, _SC("Sq_Packet_Put_int"));
|
|
|
|
|
register_Packet_func(v, Packet_Put_binary, _SC("Sq_Packet_Put_binary"));
|
2024-07-22 19:26:56 +08:00
|
|
|
register_Packet_func(v, Packet_Put_binaryex, _SC("Sq_Packet_Put_binaryex"));
|
2024-04-24 10:25:44 +08:00
|
|
|
register_Packet_func(v, Packet_Finalize, _SC("Sq_Packet_Finalize"));
|
|
|
|
|
register_Packet_func(v, Packet_Send, _SC("Sq_Packet_Send"));
|
|
|
|
|
register_Packet_func(v, Packet_Delete, _SC("Sq_Packet_Delete"));
|
|
|
|
|
}
|