class RemoteClient { public: std::wstring m_userID; float m_x, m_y, m_z; float m_vx, m_vy, m_vz; float m_angle; }; |
CriticalSection m_critSec; // key: client HostID unordered_map<int, shared_ptr<RemoteClient> > m_remoteClients; |
DEFRMI_Simple_RequestLogin(SimpleServer) { ... CriticalSectionLock lock(m_critSec, true); // already logged in? auto it = m_remoteClients.find(remote); if (it != m_remoteClients.end()) { m_proxy.NotifyLoginFailed(remote, RmiContext::ReliableSend, L"Already logged in."); return true; } // add new player // NOTE: we don't care duplicated login for now. We are in tutorial. auto newRC = make_shared<RemoteClient>(); newRC->m_userID = id; m_remoteClients[remote] = newRC; |
m_netServer->OnClientLeave = [this](CNetClientInfo* info, ErrorInfo*, const ByteArray&) { cout << "Client " << info->m_HostID << " went out.\n"; CriticalSectionLock lock(m_critSec, true); // delete player m_remoteClients.erase(info->m_HostID); }; |
登录 后参与讨论
暂无评论,来抢沙发








