localconnection.cpp

来自「这是整套横扫千军3D版游戏的源码」· C++ 代码 · 共 87 行

CPP
87
字号
#include "LocalConnection.h"

#include <string.h>

#include "Exception.h"

namespace netcode {

// static stuff
unsigned CLocalConnection::Instances = 0;
CLocalConnection::MsgQueue CLocalConnection::Data[2];
boost::mutex CLocalConnection::Mutex[2];

CLocalConnection::CLocalConnection()
{
	if (Instances > 1)
	{
		throw network_error("Opening a third local connection is not allowed");
	}
	instance = Instances;
	Instances++;
}

CLocalConnection::~CLocalConnection()
{
	Instances--;
	while (!Data[instance].empty())
	{
		delete Data[instance].front();
		Data[instance].pop_front();
	}
}

void CLocalConnection::SendData(const unsigned char *data, const unsigned length)
{
	boost::mutex::scoped_lock scoped_lock(Mutex[OtherInstance()]);

	dataSent += length;
	Data[OtherInstance()].push_back(new RawPacket(data, length));
	dataSent += length;
}

const RawPacket* CLocalConnection::Peek(unsigned ahead) const
{
	boost::mutex::scoped_lock scoped_lock(Mutex[instance]);

	if (ahead < Data[instance].size())
		return Data[instance][ahead];

	return NULL;
}

RawPacket* CLocalConnection::GetData()
{
	boost::mutex::scoped_lock scoped_lock(Mutex[instance]);
	
	if (!Data[instance].empty())
	{
		RawPacket* next = Data[instance].front();
		Data[instance].pop_front();
		dataRecv += next->length;
		return next;
	}
	else
		return NULL;
}

void CLocalConnection::Flush(const bool forced)
{
}

bool CLocalConnection::CheckTimeout() const
{
	return false;
}

unsigned CLocalConnection::OtherInstance() const
{
	if (instance == 0)
		return 1;
	else
		return 0;
}

} // namespace netcode

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?