void GameSocket::ProcessData(unsigned char* data, int size) { Reader.SetBuffer(data); int offset = 0; while(offset < size) { unsigned short psize = Reader.ReadWord() + 6; unsigned short opcode = Reader.ReadWord(); Reader.Skip(2); switch(opcode) { case GAME_CLIENT_KEEP_ALIVE: case GAME_CLIENT_ACCEPT_HANDSHAKE: break; case GAME_CLIENT_INFO: SendServerInfo(); break; case GAME_CLIENT_PATCH_REQUEST: SendPatchInfo(); break; case GAME_CLIENT_AUTH: OnAuth(); break; case GAME_CLIENT_CHARACTER: OnCharacter(); break; case GAME_CLIENT_INGAME_REQUEST: OnIngameRequest(); break; case GAME_CLIENT_MOVEMENT: OnMovement(); break; case GAME_CLIENT_CLOSE: OnGameQuit(); break; case GAME_CLIENT_CHAT: OnChat(); break; case GAME_CLIENT_ITEM_MOVE: OnItem(); break; case GAME_CLIENT_TARGET: OnTarget(); break; case GAME_CLIENT_INGAME_NOTIFY: OnIngameNotify(); break; case GAME_CLIENT_EMOTION://update carlosx OnEmotion(); break; case GAME_CLIENT_SIT: //update carlosx OnSit(); break; case GAME_CLIENT_ESTRELLA: //update carlosx OnEstrella(); break; case GAME_CLIENT_ADDSKILL: //update carlosx OnUpdateSkill(); break; case GAME_CLIENT_MASTERY: //update carlosx OnMastertSkill(); break; case GAME_CLIENT_ATSKILL: //update carlosx OnATSkill(); break; case GAME_CLIENT_ADDSTR: //update carlosx OnADDStr(); break; case GAME_CLIENT_ADDINT: //update carlosx OnADDInt(); break; case GAME_CLIENT_GM: OnGM(); break; default: printf("Unknown opcode: %.4x\n", opcode); } Reader.Reset(); Reader.Skip(psize); offset += psize; } Reader.Reset(); }
LRESULT Window::OnMessage(HWND _hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: OnCreate(); return 0; case WM_DESTROY: OnDestroy(); return 0; case WM_SIZE: OnResize({LOWORD(lParam), HIWORD(lParam)}); return 0; case WM_MOUSEMOVE: if (OnMouseMove(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), wParam)) return 0; break; case WM_LBUTTONDOWN: if (OnMouseDown(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; case WM_LBUTTONUP: if (OnMouseUp(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; case WM_LBUTTONDBLCLK: if (!double_clicks) /* instead of disabling CS_DBLCLKS (which would affect all instances of a window class), we just translate WM_LBUTTONDBLCLK to WM_LBUTTONDOWN here; this even works for built-in window class such as BUTTON */ return OnMessage(_hWnd, WM_LBUTTONDOWN, wParam, lParam); if (OnMouseDouble(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam))) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; #ifdef WM_MOUSEWHEEL case WM_MOUSEWHEEL: if (OnMouseWheel(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam), GET_WHEEL_DELTA_WPARAM(wParam))) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; #endif case WM_KEYDOWN: if (OnKeyDown(wParam)) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; case WM_KEYUP: if (OnKeyUp(wParam)) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; case WM_CHAR: if (OnCharacter((TCHAR)wParam)) /* true returned: message was handled */ return 0; break; case WM_COMMAND: if (OnCommand(LOWORD(wParam), HIWORD(wParam))) { /* true returned: message was handled */ ResetUserIdle(); return 0; } break; case WM_CANCELMODE: OnCancelMode(); /* pass on to DefWindowProc(), there may be more to do */ break; case WM_SETFOCUS: OnSetFocus(); /* pass on to DefWindowProc() so the underlying window class knows it's focused */ break; case WM_KILLFOCUS: OnKillFocus(); /* pass on to DefWindowProc() so the underlying window class knows it's not focused anymore */ break; case WM_TIMER: if (OnTimer(*(WindowTimer *)wParam)) return 0; break; case WM_PAINT: if (custom_painting) { PaintCanvas canvas(*this); OnPaint(canvas, canvas.get_dirty()); return 0; } break; case WM_GETDLGCODE: if (OnKeyCheck(wParam)) return DLGC_WANTMESSAGE; break; } if (message >= WM_USER && message <= 0x7FFF && OnUser(message - WM_USER)) return 0; return OnUnhandledMessage(_hWnd, message, wParam, lParam); }