ClientSockMsg.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:2k
- #include "stdafx.h"
- DWORD WINAPI ThreadFuncForMsg(LPVOID lpParameter);
- BOOL CheckSocketError(LPARAM lParam);
- VOID WINAPI OnTimerProc(HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
- void OnCommand(WPARAM wParam, LPARAM lParam);
- BOOL InitThread(LPTHREAD_START_ROUTINE lpRoutine);
- extern SOCKET g_csock;
- extern HWND g_hMainWnd;
- extern HWND g_hStatusBar;
- extern HWND g_hToolBar;
- HANDLE g_hMsgThread = INVALID_HANDLE_VALUE;
- CWHQueue g_xMsgQueue;
- static char WorkBuff[8192];
- static int nWorkBuffLen;
- LPARAM OnClientSockMsg(WPARAM wParam, LPARAM lParam)
- {
- switch (WSAGETSELECTEVENT(lParam))
- {
- case FD_CONNECT:
- {
- DWORD dwThreadIDForMsg = 0;
- if (CheckSocketError(lParam))
- {
- dwThreadIDForMsg = 0;
- if (InitThread(ThreadFuncForMsg))
- {
- KillTimer(g_hMainWnd, _ID_TIMER_CONNECTSERVER);
-
- SetTimer(g_hMainWnd, _ID_TIMER_KEEPALIVE, 5000, (TIMERPROC)OnTimerProc);
- InsertLogMsg(IDS_CONNECT_LOGINSERVER);
- SendMessage(g_hStatusBar, SB_SETTEXT, MAKEWORD(1, 0), (LPARAM)_TEXT("Connected"));
- }
- }
- else
- {
- closesocket(g_csock);
- g_csock = INVALID_SOCKET;
- SetTimer(g_hMainWnd, _ID_TIMER_CONNECTSERVER, 10000, (TIMERPROC)OnTimerProc);
- }
- break;
- }
- case FD_CLOSE:
- {
- closesocket(g_csock);
- g_csock = INVALID_SOCKET;
- OnCommand(IDM_STOPSERVICE, 0);
- break;
- }
- case FD_READ:
- {
- int nSocket = 0;
- char *pszFirst = NULL, *pszEnd = NULL;
- UINT nRecv = 0;
- ioctlsocket((SOCKET)wParam, FIONREAD, (u_long *)&nRecv);
- if (nRecv)
- {
- char *pszPacket = new char[nRecv + 1];
- nRecv = recv((SOCKET)wParam, pszPacket, nRecv, 0);
- pszPacket[nRecv] = ' ';
- if (!(g_xMsgQueue.PushQ((BYTE *)pszPacket)))
- InsertLogMsg(_TEXT("[INFO] Not enough queue(g_xMsgQueue) buffer."));
- }
- break;
- }
- }
- return 0L;
- }
- void SendExToServer(char *pszPacket)
- {
- DWORD dwSendBytes;
- WSABUF buf;
- buf.len = memlen(pszPacket) - 1;
- buf.buf = pszPacket;
- if ( WSASend(g_csock, &buf, 1, &dwSendBytes, 0, NULL, NULL) == SOCKET_ERROR )
- {
- int nErr = WSAGetLastError();
- }
- }