| 
									
										
										
										
											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")); | 
					
						
							|  |  |  | } |