Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern(Windows) private static BOOL receiveMsg_Hooked(ubyte* buffer, int* pSize)
- {
- void* instancePtr;
- asm
- {
- mov instancePtr, ECX;
- }
- if (instance._clientState.networkInstance is null)
- {
- instance._clientState.networkInstance = instancePtr;
- }
- BOOL result = instance.receiveMsgHook.invokeOriginal(instancePtr, buffer, pSize);
- ConcurrentQueue!(NetMsg) recvQueue = instance._clientState.recvQueue;
- NetMsg msg;
- if (result)
- {
- ushort msgSize = *cast(ushort*)buffer;
- if ((msgSize < 1024) && (msgSize == *pSize))
- {
- HANDLE ctbRecvPipe = instance._clientState.ctbRecvPipe;
- uint bytesWritten;
- WriteFile(ctbRecvPipe, buffer, *pSize, &bytesWritten, null);
- result = FALSE;
- if (!recvQueue.empty)
- {
- if (recvQueue.dequeue(msg))
- {
- *pSize = msg.size;
- buffer[0..msg.size] = (cast(ubyte*)&msg.size)[0..msg.size];
- result = TRUE;
- }
- }
- }
- }
- else
- {
- if (!recvQueue.empty)
- {
- if (recvQueue.dequeue(msg))
- {
- *pSize = msg.size;
- buffer[0..msg.size] = (cast(ubyte*)&msg.size)[0..msg.size];
- result = TRUE;
- }
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement