📄 kailleraclient.cpp
字号:
#define KAILLERA_DLL
#include "kailleraclient.h"
kailleraInfos Infos;
SOCKET hSocket;
DLLEXP kailleraInit()
{
WSADATA wsaData;
WORD version=MAKEWORD(2,0);
int ret=WSAStartup(version,&wsaData);
if(ret!=0)return 0;
else return 1;
}
DLLEXP kailleraConnect(char * a_pIP,DWORD a_dwPort)//连接到服务器
{
SOCKADDR_IN Addr;
hSocket=socket(AF_INET, SOCK_STREAM, 0);
if(hSocket==INVALID_SOCKET)return 0;
Addr.sin_addr.S_un.S_addr=inet_addr(a_pIP);
Addr.sin_family=AF_INET;
Addr.sin_port=htons((unsigned short)a_dwPort);
int ret=connect(hSocket,(LPSOCKADDR)&Addr,sizeof(Addr));
if(ret==SOCKET_ERROR)return 0;
else return 1;
}
DLLEXP kailleraUserLogin(int roomid,int tableid,char *playername)//登陆
{
LoginInfo login;
login.Desk=tableid;
login.Room=roomid;
strcpy(login.Name,playername);
SendToServer(&(char&)login,sizeof(LoginInfo),GAME_STATE_LOGIN);
GameMsg package;
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS) return 1;
else return 0;
}
DLLEXP kailleraCreateGame(char * gamename)//建立新游戏
{
CreateInfo createinfo;
strcpy(createinfo.GameName,gamename);
SendToServer(&(char&)createinfo,sizeof(CreateInfo),GAME_STATE_CREATE);
GameMsg package;
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS) return 1;
else return 0;
}
DWORD WINAPI Waitthread(LPVOID lpparam)//加入游戏后等待开始的线程
{
GameMsg package;
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS)
{StartInfo startinfo;
ZeroMemory(&startinfo,sizeof(StartInfo));
memcpy(&startinfo,&package.Buffer,package.Size);
gameCallback gCallBack=0;
gCallBack=Infos.gameCallback;
(*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
return 1;}
else return 0;
}
DLLEXP kailleraJoinGame(char * gamename)//加入游戏
{
JoinInfo joininfo;
strcpy(joininfo.GameName,gamename);
SendToServer(&(char&)joininfo,sizeof(JoinInfo),GAME_STATE_JOIN);
GameMsg package;
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS)
{/*recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS)
{StartInfo startinfo;
ZeroMemory(&startinfo,sizeof(StartInfo));
memcpy(&startinfo,&package.Buffer,package.Size);
gameCallback gCallBack=0;
gCallBack=Infos.gameCallback;
(*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
return 1;}
else return 0;*/ //不用线程的代码,会阻塞
DWORD dwthreadID;
CreateThread(NULL,0,Waitthread,NULL,0,&dwthreadID);
return 1;
}
else return 0;
}
DWORD WINAPI Startthread(LPVOID lpparam)
{
gameCallback gCallBack=0;
gCallBack=Infos.gameCallback;
(*gCallBack)(Infos.gameName,1,2);
return 1;
}
DLLEXP kailleraStartGame()//主机发开始信息等待服务器开始信号
{ GameMsg package;
StartInfo startinfo;
ZeroMemory(&startinfo,sizeof(StartInfo));
//startinfo.player=1;
//startinfo.numplayers=2;
//strcpy(startinfo.GameName,Infos.gameName);
SendToServer(&(char&)startinfo,sizeof(StartInfo),GAME_STATE_START);
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS)
{//memcpy(&startinfo,&package.Buffer,package.Size);
//gameCallback gCallBack=0;
//gCallBack=Infos.gameCallback;
//(*gCallBack)(startinfo.GameName,startinfo.player,startinfo.numplayers);
DWORD dwthreadID;
CreateThread(NULL,0,Startthread,NULL,0,&dwthreadID);
return 1;
}
else return 0;
}
DLLEXP kailleraShutdown()
{
if(WSACleanup()!=0)return 0;
else return 1;
}
DLLEXP kailleraSetInfos(kailleraInfos *infos)
{
Infos.appName=infos->appName;
Infos.gameName=infos->gameName;
Infos.gameCallback=infos->gameCallback;
return 1;
}
DLLEXP kailleraModifyPlayValues(void *values, int size)//values:in/out
{
MsgInfo msginfo;
ZeroMemory(&msginfo,sizeof(MsgInfo));
strcpy(msginfo.Msg,(char*)values);
SendToServer(&(char&)msginfo,sizeof(MsgInfo),GAME_STATE_MSG);
GameMsg package;
recv(hSocket,&(char&)package,sizeof(GameMsg),0);
if(package.MsgType==SERVER_SUCCESS)
{
ZeroMemory(&msginfo,sizeof(MsgInfo));
strcpy(msginfo.Msg,package.Buffer);
strcpy((char*)values,msginfo.Msg);
return 1;
}
else return 0;
}
DLLEXP kailleraEndGame()
{
EndInfo endinfo;
ZeroMemory(&endinfo,sizeof(EndInfo));
SendToServer(&(char&)endinfo,sizeof(EndInfo),GAME_STATE_EXIT);
closesocket(hSocket);
hSocket=NULL;
return 1;
}
DLLEXP kailleraUserLogOut()
{
EndInfo endinfo;
ZeroMemory(&endinfo,sizeof(EndInfo));
SendToServer(&(char&)endinfo,sizeof(EndInfo),GAME_STATE_END);
return 1;
}
int SendToServer(char *buf,int buflen,int nType)//发信息函数
{
GameMsg *pNewPackage = (GameMsg*)new char[sizeof(GameMsg)];
ZeroMemory(pNewPackage,sizeof(GameMsg));
pNewPackage->MsgType=nType;
memcpy(pNewPackage->Buffer,buf,buflen);
pNewPackage->Size=buflen;
send(hSocket,(char*)pNewPackage,sizeof(GameMsg),0);
delete pNewPackage;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -