#include "TCPSever.h"
#include "RoomMgr.h"
#include "PlayerMgr.h"
#include "Room.h"
#include "Player.h"
#include <vector>
#include <iostream>
void TCPSever::OnAccept(XS::Client* client)
{
std::cout << "Client Enter!" << std::endl;
client->SetPtr(nullptr);
//Player* player = new Player(client);
//client->SetPtr(player);
}
void TCPSever::OnNetMsg(XS::Client* client)
{
int endIndex = 0;
std::cout << "Message For Client:" << client->GetRecvBuff() << std::endl;
for (int i = 0; i < client->GetRecvBuffLen(); i++)
{
if (client->GetRecvBuff()[i] == ';')
{
OnPack(client,
client->GetRecvBuff() + endIndex,
i - endIndex);
endIndex = i + 1;
}
}
client->RemoveBuf(client->GetRecvBuffLen());
std::cout << "Message For Client After:" << client->GetRecvBuff() << std::endl;
}
void TCPSever::DisConnect(XS::Client* client)
{
std::cout << "Client Connected" << std::endl;
Player* player = (Player*)client->GetPtr();
if (player == nullptr) return;
if (player->GetRoom())
{
player->GetRoom()->OnLeave(player);
}
}
void TCPSever::OnPack(XS::Client* client, const char* buffer, int len)
{
char buff[1024] = { 0 };
memcpy(buff, buffer, len);
std::cout << "OnPack Recv Message:" << buff << std::endl;
//二次分包
std::vector<std::string> msgBox;
int curIndex = 0;
for (int i = 0; i < len; i++)
{
if (buff[i] == '-')
{
char str[4096] = { 0 };
for (int j = 0; j < i - curIndex; j++)
{
str[j] = buff[curIndex + j];
}
curIndex = i + 1;
msgBox.push_back(str);
}
}
if (msgBox.size() == 0) return;
//注册
if (msgBox[0] == "regisit")
{
//安全检测
if (msgBox.size() != 4) return;
//把信息存到玩家管理器中
PlayerMgr::Ins()->Init(msgBox[1], msgBox[2], msgBox[2]);
std::cout << "注册成功" << std::endl;
std::string str = "regisitedOK;";
client->Send(str.c_str(), str.length());
}
else if (msgBox[0] == "login")
{
//安全检查
if (msgBox.size() != 3)return;
if (PlayerMgr::Ins()->CheckRegisit(msgBox[1]))
{
Player* player = PlayerMgr::Ins()->MakePlayer(client, msgBox[1], msgBox[2]);
if (player == nullptr)
return;
client->SetPtr(player);
std::cout << "登录成功" << std::endl;
std::string str = "loadOK;";
player->Send(str.c_str(), str.length());
}
return;
}
else if (msgBox[0] == "join")
{
if (msgBox.size() != 2) return;
Player* player = (Player*)(client->GetPtr());
if (player == nullptr)
return;
//房间名称
std::string name = msgBox[1];
Room* proom = RoomMgr::Ins()->GetRoom(name);
if (proom)
{
proom->Join(player);
}
std::cout << "成功加入房间" << std::endl;
std::string str = "joinOK;";
player->Send(str.c_str(), str.length());
return;
}
else if (msgBox[0] == "message")
{
if (msgBox.size() != 2) return;
Player* player = (Player*)(client->GetPtr());
if (player == nullptr)
{
return;
}
if (player->GetRoom() != nullptr)
{
player->GetRoom()->OnMsg(player, msgBox[1]);
}
else
{
std::cout << "请先加入房间" << std::endl;
std::string str = "no room;";
player->Send(str.c_str(), str.length());
return;
}
}
}
评论0