GameLogic - Pre merge with Linda

This commit is contained in:
Dennis Andersen 2013-12-17 14:15:20 +01:00
parent 682a28513b
commit 097fa1da34
8 changed files with 32 additions and 10 deletions

View File

@ -6,7 +6,7 @@
#include <vld.h>
#include "DanBiasServerAPI.h"
//#include "DanBiasGame.h"
#include "DanBiasGame.h"
int WINAPI WinMain( HINSTANCE hinst, HINSTANCE prevInst, PSTR cmdLine, int cmdShow)

View File

@ -28,6 +28,7 @@ Oyster::Network::NetworkClient* ClientObject::NetClient_Object()
void ClientObject::ProtocolRecievedCallback(Oyster::Network::CustomNetProtocol& protocol)
{
//this->client->Send(&protocol);
if(!this->box) return;
NetworkSession::NetEvent _event;

View File

@ -3,6 +3,8 @@
#include "NetworkSession.h"
#include <mutex>
static std::mutex ClientListLock;
namespace DanBias
{
NetworkSession::NetworkSession()
@ -16,16 +18,27 @@ namespace DanBias
void NetworkSession::AttachClient(Utility::DynamicMemory::SmartPointer<ClientObject> client)
{
for (unsigned int i = 0; i < this->clients.size(); i++)
while (!ClientListLock.try_lock()); //Possible Deadlock
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[i] = client;
this->clients[i]->SetPostbox(&this->box);
return;
}
}
this->clients.push_back(client);
this->clients[this->clients.size() - 1]->SetPostbox(&this->box);
}
else
{
this->clients[k]->SetPostbox(&this->box);
}
ClientListLock.unlock();
}
void NetworkSession::DetachClient(Oyster::Network::NetworkClient* client)

View File

@ -118,7 +118,8 @@ theBegining:
std::this_thread::sleep_for(std::chrono::milliseconds(1));
break;
case Oyster::Thread::OYSTER_THREAD_PRIORITY_3:
std::this_thread::yield();
std::this_thread::sleep_for(std::chrono::milliseconds(10));
//std::this_thread::yield();
break;
}
if(w->owner)

View File

@ -35,6 +35,7 @@ namespace Oyster
struct ProtocolRecieverObject
{
virtual void ProtocolRecievedCallback(CustomNetProtocol& protocol) = 0;
virtual void DisconnectedCallback(CustomNetProtocol& protocol) { };
};
union RecieverObject

View File

@ -238,6 +238,11 @@ void NetworkClient::Send(CustomProtocolObject& protocol)
this->privateData->Send(protocol.GetProtocol());
}
void NetworkClient::Send(CustomNetProtocol* protocol)
{
this->privateData->Send(protocol);
}
void NetworkClient::SetRecieverObject(RecieverObject recvObj, NetworkProtocolCallbackType type)
{
if (type == NetworkProtocolCallbackType_Unknown) return; //It should probably still be set even if it is unknown.

View File

@ -40,6 +40,7 @@ namespace Oyster
//Adds the protocol to the queue of protocols to be sent.
void Send(CustomProtocolObject& protocol);
void Send(CustomNetProtocol* protocol);
void SetRecieverObject(RecieverObject recvObj, NetworkProtocolCallbackType type);

View File

@ -169,7 +169,7 @@ namespace Oyster
//bool (1-bit)
bool Unpackb(unsigned char buffer[])
{
return buffer;
return *buffer;
}
//char (8-bit)