GameLogic - Added Postbox system to netsession

This commit is contained in:
Dennis Andersen 2013-12-18 08:37:45 +01:00
parent 8700824d12
commit bf5cc69ff7
2 changed files with 67 additions and 44 deletions

View File

@ -18,24 +18,24 @@ namespace DanBias
void NetworkSession::AttachClient(Utility::DynamicMemory::SmartPointer<ClientObject> client)
{
while (!ClientListLock.try_lock()); //Possible Deadlock
ClientListLock.lock();
int k = -1;
for (unsigned int i = 0; (k == -1) && i < this->clients.size(); i++)
{
if(!this->clients[i])
k = i;
}
int k = -1;
for (unsigned int i = 0; (k == -1) && i < this->clients.size(); i++)
{
if(!this->clients[i])
k = i;
}
if(k == -1)
{
this->clients.push_back(client);
this->clients[this->clients.size() - 1]->SetPostbox(&this->box);
}
else
{
this->clients[k]->SetPostbox(&this->box);
}
if(k == -1)
{
this->clients.push_back(client);
this->clients[this->clients.size() - 1]->SetPostbox(&this->box);
}
else
{
this->clients[k]->SetPostbox(&this->box);
}
ClientListLock.unlock();
@ -43,44 +43,67 @@ namespace DanBias
void NetworkSession::DetachClient(Oyster::Network::NetworkClient* client)
{
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == client->Id())
this->clients[i] = 0;
}
ClientListLock.lock();
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == client->Id())
this->clients[i] = 0;
}
ClientListLock.unlock();
}
void NetworkSession::DetachClient(ClientObject* client)
{
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == client->NetClient_Object()->Id())
this->clients[i] = 0;
}
ClientListLock.lock();
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == client->NetClient_Object()->Id())
this->clients[i] = 0;
}
ClientListLock.unlock();
}
void NetworkSession::DetachClient(short ID)
{
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == ID)
this->clients[i] = 0;
}
ClientListLock.lock();
for (unsigned int i = 0; i < this->clients.size(); i++)
{
if(this->clients[0]->NetClient_Object()->Id() == ID)
this->clients[i] = 0;
}
ClientListLock.unlock();
}
void NetworkSession::DetachClient()
{
for (unsigned int i = 0; i < this->clients.size(); i++)
{
this->clients[i] = 0;
}
ClientListLock.lock();
for (unsigned int i = 0; i < this->clients.size(); i++)
{
this->clients[i] = 0;
}
ClientListLock.unlock();
}
void NetworkSession::Kick()
{
for (unsigned int i = 0; i < this->clients.size(); i++)
{
this->clients[i]->NetClient_Object()->Disconnect();
this->clients[i] = 0;
}
ClientListLock.lock();
for (unsigned int i = 0; i < this->clients.size(); i++)
{
this->clients[i]->NetClient_Object()->Disconnect();
this->clients[i] = 0;
}
ClientListLock.unlock();
}
void NetworkSession::SetPostbox(Oyster::IPostBox<DanBias::NetworkSession::NetEvent> *box)
{
this->box = box;
}
}//End namespace DanBias

View File

@ -6,7 +6,7 @@
#define NOMINMAX
#include "Utilities.h"
#include <PostBox\PostBox.h>
#include <PostBox\IPostBox.h>
#include <CustomNetProtocol.h>
#include <NetworkClient.h>
#include <vector>
@ -40,11 +40,11 @@ namespace DanBias
void Send(Oyster::Network::CustomNetProtocol& protocol, int ID);
//TODO: Do more lobby features
//virtual void
void SetPostbox(Oyster::IPostBox<DanBias::NetworkSession::NetEvent> *box);
protected:
std::vector<Utility::DynamicMemory::SmartPointer<ClientObject>> clients;
Oyster::PostBox<DanBias::NetworkSession::NetEvent> box;
Oyster::IPostBox<DanBias::NetworkSession::NetEvent> *box;
};
}//End namespace DanBias
#endif // !DANBIASSERVER_NETWORK_SESSION_H