📄 cudpsocket.cpp
字号:
SendtoPacket( pUDPPacket );
}
////////////////////////////////////////////////////////////////////////////////////////
// 秦寸 荤侩磊 茫扁
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::FindPlayer(_LPSOCKET_FD lpSocketFd ,char * lpPlayerID, BYTE nOP )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
_LPZC_FINDPLAYER_ASK lpPacket = (_LPZC_FINDPLAYER_ASK)lpSendPacket->strPacket;
lpSendPacket->dwCommand = ZC_FINDPLAYER_ASK ;
memcpy(lpPacket->strPlayerID, lpPlayerID,20) ;
memcpy(lpPacket->cIp,_Module.m_szUdpIP,20 );
lpPacket->wPort = _Module.m_nMapPORT ;
lpSendPacket->pSocketFD = lpSocketFd ;
lpPacket->nOP = nOP ;
lpPacket->dwMapID = g_pMap->GetMapSeq(lpSocketFd->pPlayer->m_nMapLayer ) ;
lpPacket->wX = lpSocketFd->pPlayer->m_Tile.x ;
lpPacket->wY = lpSocketFd->pPlayer->m_Tile.y ;
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
// GM疙飞阑 辑滚肺 傈价窃
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::ServerCommand(_LPSOCKET_FD lpSocketFd,BYTE nServerCommand,bool bOnOff )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
_LPZC_SERVERCOMMAND lpPacket = (_LPZC_SERVERCOMMAND) lpSendPacket->strPacket ;
lpSendPacket->dwCommand = ZC_SERVERCOMMAND ;
lpSendPacket->pSocketFD = lpSocketFd ;
lpPacket->dwMapID = 0 ;
lpPacket->nCOMMAND = nServerCommand ;
lpPacket->bOnOff = bOnOff ;
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
// 漂沥 荤侩磊俊霸 郴府绰 COMMAND
// Jason 2004-07-22
//
////////////////////////////////////////////////////////////////////////////////////////
//void CUdpSocket::ServerCommand(_LPSOCKET_FD lpSocketFd,BYTE nServerCommand, char* pCharId, bool bOnOff )
//Jason Added
void CUdpSocket::ServerCommand(_LPSOCKET_FD lpSocketFd,BYTE nServerCommand, char* pGMID, char* pCharId, bool bOnOff )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
_LPZC_SERVERCOMMAND lpPacket = (_LPZC_SERVERCOMMAND) lpSendPacket->strPacket ;
lpSendPacket->dwCommand = ZC_SERVERCOMMAND ;
lpSendPacket->pSocketFD = lpSocketFd ;
lpPacket->dwMapID = 0 ;
lpPacket->nCOMMAND = nServerCommand ;
lpPacket->bOnOff = bOnOff ;
_tcscpy(lpPacket->strPlayerID, pCharId);
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::PartyChat(_LPZW_PARTYCHAT_ASK lpPartyChat_Ask )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
lpSendPacket->dwCommand = ZC_PARTYCHAT_ASK ;
memcpy(lpSendPacket->strPacket,lpPartyChat_Ask,sizeof(_ZW_PARTYCHAT_ASK)) ;
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
// UDP Message肺 辨靛 傍瘤 皋矫瘤甫 傈价窃
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendGuildNotice(_LPZP_GUILDMSG_ASK lpGuildNotice )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
lpSendPacket->dwCommand = ZC_GUILD_NOTICE;
_LPZC_GUILDMSG_ASK p = (_LPZC_GUILDMSG_ASK) lpSendPacket->strPacket ;
memcpy(&p->lpGuildMsg,lpGuildNotice,sizeof(_ZP_GUILDMSG_ASK)) ;
p->dwMapID = 0 ;
SendtoWorldServer(lpSendPacket) ;
}
#ifdef DEF_GUILDBANK
////////////////////////////////////////////////////////////////////////////////////////
// UDP Message肺 辨靛 傍瘤 皋矫瘤甫 傈价窃
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendGuildNotice( char *pGuildName, char *pMsg )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
lpSendPacket->dwCommand = ZC_GUILD_NOTICE;
_LPZC_GUILDMSG_ASK p = (_LPZC_GUILDMSG_ASK) lpSendPacket->strPacket ;
p->dwMapID = 0 ; // World Server俊辑 葛电 Map Server俊 傈价窃
_LPZP_GUILDMSG_ASK pGuildMsg = (_LPZP_GUILDMSG_ASK)(&p->lpGuildMsg);
pGuildMsg->nType = 4; // 犬牢饶 昏力 贸府窃
memcpy( pGuildMsg->strGuildName , pGuildName, PLAYERID_LEN);
memcpy( pGuildMsg->strPlayerID , pGuildName, PLAYERID_LEN); // 犬牢饶 昏力 贸府窃
memcpy( pGuildMsg->strMsg , pMsg, 100 );
SendtoWorldServer(lpSendPacket) ;
}
#endif
////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendChatMsg(_LPSOCKET_FD lpSocketFd ,_LPZP_CHATWHISPER_ASK lpPacket )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
lpSendPacket->dwCommand = ZC_CHATWHISPER_ASK ;
_LPZC_CHATWHISPER_ASK lpChatWisper = (_LPZC_CHATWHISPER_ASK) lpSendPacket->strPacket ;
memcpy(lpChatWisper,lpPacket,sizeof(_ZP_CHATWHISPER_ASK)) ;
memcpy(lpChatWisper->cIp,_Module.m_szUdpIP,20 );
lpChatWisper->wPort = _Module.m_nMapPORT ;
lpSendPacket->pSocketFD = lpSocketFd ;
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
//
//
////////////////////////////////////////////////////////////////////////////////////////
void CUdpSocket::SendNoticeMsg(DWORD dwMapID,char * lpMsg )
{
_LPUDPPACKET lpSendPacket = (_LPUDPPACKET) m_pUDPIOPool->Alloc() ;
lpSendPacket->dwCommand = ZC_NOTICE ;
_LPZW_NOTICEMSG lpNotice = (_LPZW_NOTICEMSG) lpSendPacket->strPacket ;
memcpy(lpNotice->strMsg ,lpMsg,100) ;
lpNotice->dwMapID = dwMapID ;
SendtoWorldServer(lpSendPacket) ;
}
////////////////////////////////////////////////////////////////////////////////////////
// UDP
//
////////////////////////////////////////////////////////////////////////////////////////
bool CUdpSocket::bInit(char * pIPAddr,int iPort)
{
SOCKADDR_IN saTemp;
if (!bCreateSock())
{
#ifdef DEF_JASONTEST
ErrorMsg("Error: File Name(%s), Line(%d)", __FILE__, __LINE__ );
#endif
return false ;
}
#ifdef DEF_NEWREGISTRY
m_pUDPIOPool = new CMemPool<_UDPPACKET>(_Module.m_dwMaxUser);
#else
m_pUDPIOPool = new CMemPool<_UDPPACKET>(MAX_SOCKET_CONTEXT);
#endif
saTemp.sin_family = AF_INET;
saTemp.sin_port = ::htons(iPort);
// 林家甫 瘤沥窍瘤 臼疽促. 磊悼栏肺 且寸.
if (NULL == pIPAddr)
{
saTemp.sin_addr.s_addr = ::htons(INADDR_ANY) ;
}
else
{
saTemp.sin_addr.s_addr = inet_addr(pIPAddr );
}
int reuse = 1;
int nRet = setsockopt(m_ListenSock, SOL_SOCKET, SO_REUSEADDR, (char FAR *)&reuse, sizeof(int));
if (nRet == SOCKET_ERROR)
{
ErrorMsg( "(X) UDP Reuse addr error" );
}
if (bind(m_ListenSock, (struct sockaddr *) &saTemp, sizeof(saTemp)) == SOCKET_ERROR)
{
wsprintf(m_cMsg,"Bind Error: %d\n", WSAGetLastError());
OutputDebugString(m_cMsg);
CLOSESOCKET(m_ListenSock);
return false;
}
// 焊尘 绢靛饭胶俊 包茄 汲沥
m_SendAddr.sin_family = AF_INET;
m_SendAddr.sin_port = htons( _Module.m_nWorldPORT );
m_SendAddr.sin_addr.s_addr = inet_addr(_Module.m_szWorldIP );
m_LogAddr.sin_family = AF_INET;
m_LogAddr.sin_port = htons( _Module.m_nLogPORT );
m_LogAddr.sin_addr.s_addr = inet_addr(_Module.m_szLogIP );
// thread Start
if (!bStartThread()) return false ;
for(int i =0; i < DEF_MAXCONTROLPACKET; i++ )
{
OnTransFunc[i].proc = UDPPacket_Nothing;
}
//
// 龋免且 窃荐 捞抚阑 窃荐 器牢磐 硅凯俊 笼绢 持绰促.
//
OnTransFunc[ZC_FINDPLAYER_ASK ].proc = UDPPacket_Ask_FindPlayer;
OnTransFunc[ZC_FINDPLAYER_REP ].proc = UDPPacket_Rep_FindPlayer;
OnTransFunc[ZC_CHATWHISPER_ASK ].proc = UDPPacket_Ask_ChatWhisper;
OnTransFunc[ZC_CHATWHISPER_REP ].proc = UDPPacket_Rep_ChatWhisper;
OnTransFunc[ZC_PARTYCHAT_ASK ].proc = UDPPacket_Ask_PartyChat;
OnTransFunc[ZC_NOTICE ].proc = UDPPacket_Notice;
OnTransFunc[ZC_GUILD_NOTICE ].proc = UDPPacket_GuildNoticeMsg;
OnTransFunc[ZC_SERVERCOMMAND ].proc = UDPPacket_ServerCommand;
return (true);
}
////////////////////////////////////////////////////////////////////////////////////////
// MAP SERVER秦寸 PLAYER沥焊 夸没
//
////////////////////////////////////////////////////////////////////////////////////////
void UDPPacket_Ask_FindPlayer(_LPUDPSOCKET lpUdpSocket ,_LPUDPPACKET lpUdpPacket)
{
_LPZC_FINDPLAYER_ASK p = (_LPZC_FINDPLAYER_ASK)lpUdpPacket->strPacket;
_LPUDPPACKET lpPacket = (_LPUDPPACKET) lpUdpSocket->m_pUDPIOPool->Alloc() ;
_LPZC_FINDPLAYER_REP lpSendPacket = (_LPZC_FINDPLAYER_REP) lpPacket->strPacket ;
memcpy(lpSendPacket, p,sizeof(_ZC_FINDPLAYER_ASK)) ;
lpPacket->pSocketFD = lpUdpPacket->pSocketFD ;
// 庇富 惑措甫 茫澜
_LPSOCKET_FD pToSocket = g_pMap->Find_Player( p->strPlayerID );
if (pToSocket)
{
if( p->nOP == GM_CMD_SUMMONPLAYER)
{
_LPZEMIPACKET lpSendPacket = g_pServerMem->ZemiPacket_Pop();
_LPZG_MOVEMAP_ASK pMoveMap = (_LPZG_MOVEMAP_ASK)lpSendPacket->strPacket;
memcpy( pMoveMap->strPlayerID, p->strPlayerID, sizeof( pMoveMap->strPlayerID ) );
pMoveMap->dwMapID = p->dwMapID;
pMoveMap->nX = p->wX;
pMoveMap->nY = p->wY;
PacketGM_MoveMap(g_pServer, pToSocket, lpSendPacket );
g_pServerMem->ZemiPacket_Push( lpSendPacket );
}
else
{
if( p->nOP == GM_CMD_TELEPORTPLAYER)
{
lpSendPacket->dwMapID = g_pMap->GetMapSeq( pToSocket->pPlayer->m_nMapLayer ) ;
}
lpSendPacket->wX = pToSocket->pPlayer->m_Tile.x ;
lpSendPacket->wY = pToSocket->pPlayer->m_Tile.y ;
// 庇加富 汲沥捞 登绢 乐栏搁
if(pToSocket->pPlayer->m_bOptionWhisper )
lpSendPacket->nResult = 1 ;
// 庇加富 芭何 汲沥捞搁
else
lpSendPacket->nResult = 2 ;
}
}
else
{
lpSendPacket->nResult = 0 ;
}
lpPacket->dwCommand = ZC_FINDPLAYER_REP ;
lpUdpSocket->SendtoWorldServer(lpPacket) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -