您的位置:首页 > 移动开发 > Unity3D

Unity结合C++开发服务器实现多人游戏(三)

2017-02-16 17:17 411 查看
客户端服务器运作

为连接到所述客户端的服务器必须有一个NetServer对象.
NetServer对象添加到之前建立的服务器中.
在服务器上写ProudNet服务器库请参考Visual
C++ 项目设置.
 
class SimpleServer
{
    shared_ptr<CNetServer> m_netServer;
...
然后,开始一个NetServer对象在SimpleServer.Run函数中.
m_netServer = shared_ptr<CNetServer>(CNetServer::Create());
之后,启动服务器调用调用NetServer.Start函数.
此函数功能是,作为服务器角色来接收客户端的连接.
CStartServerParameter startConfig;
startConfig.m_protocolVersion = g_protocolVersion;
startConfig.m_tcpPorts.Add(g_serverPort);
startConfig.m_udpPorts.Add(g_serverPort);
startConfig.m_allowServerAsP2PGroupMember = true; // [1]
 
m_netServer->Start(startConfig);
客户端输入的服务器端口值和版本进行一致处理.
Guid g_protocolVersion = Guid::From({ 0x107b3b66, 0xb7de, 0x4091,{ 0xa5, 0xba, 0x72, 0xca, 0x1a, 0xf5, 0x1a, 0xbc } });
 
int g_serverPort = 35475;
NetServer不同与NetClient没有FrameMove函数.
存在一个单独的线程池来接收消息或者处理事件.
(注:像NetClient一样运作,设置多种线程模型,改变线程个数等方法)
进行如下操作,当服务器收到客户端的连接时调用NetServer.OnClientJoin函数.
客户端断开时调用OnClientLeave函数.
m_netServer->OnClientJoin = [](CNetClientInfo* info)
{
    cout << "Client " << info->m_HostID << " joined.\n";
};
 
m_netServer->OnClientLeave = [this](CNetClientInfo* info, ErrorInfo*, const ByteArray&)
{
    cout << "Client " << info->m_HostID << " went out.\n";
}
输出参数info中包含客户端的信息.
Info的成员变量HostID是,连接到服务器的每个客户端的唯一标识符. 
现在,让我们开启服务器,运行客户端.
如果,客户端连接服务器成功的话登陆界面会自动消失.

第四篇:Unity结合C++开发服务器实现多人游戏(四)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: