Network - Fixed copy construct
This commit is contained in:
parent
49cfbbebd5
commit
e9b41f8cb8
|
@ -26,7 +26,7 @@ namespace Oyster
|
|||
|
||||
class NetworkClient;
|
||||
class CustomNetProtocol;
|
||||
typedef void (*ClientConnectCallbackMethod)(NetworkClient&);
|
||||
typedef void (*ClientConnectCallbackMethod)(NetworkClient);
|
||||
typedef void(*ProtocolRecieverFunction)(CustomNetProtocol& protocol);
|
||||
struct ClientConnectedObject
|
||||
{
|
||||
|
|
|
@ -40,11 +40,11 @@ struct NetworkClient::PrivateData : public IThreadObject
|
|||
|
||||
bool DoWork();
|
||||
|
||||
Connection* connection;
|
||||
SmartPointer<Connection> connection;
|
||||
|
||||
IPostBox<CustomNetProtocol> *sendPostBox;
|
||||
SmartPointer<IPostBox<CustomNetProtocol>> sendPostBox;
|
||||
|
||||
RecieverObject recvObj;
|
||||
SmartPointer<RecieverObject> recvObj;
|
||||
NetworkProtocolCallbackType callbackType;
|
||||
|
||||
Oyster::Thread::OysterThread thread;
|
||||
|
@ -152,11 +152,11 @@ int NetworkClient::PrivateData::Recv()
|
|||
recvObjMutex.lock();
|
||||
if(callbackType == NetworkProtocolCallbackType_Function)
|
||||
{
|
||||
recvObj.protocolRecieverFnc(protocol);
|
||||
recvObj->protocolRecieverFnc(protocol);
|
||||
}
|
||||
else if(callbackType == NetworkProtocolCallbackType_Object)
|
||||
{
|
||||
recvObj.protocolRecievedObject->ProtocolRecievedCallback(protocol);
|
||||
recvObj->protocolRecievedObject->ProtocolRecievedCallback(protocol);
|
||||
}
|
||||
recvObjMutex.unlock();
|
||||
}
|
||||
|
@ -187,16 +187,31 @@ NetworkClient::NetworkClient(unsigned int socket)
|
|||
NetworkClient::NetworkClient(RecieverObject recvObj, NetworkProtocolCallbackType type)
|
||||
{
|
||||
privateData = new PrivateData();
|
||||
this->privateData->recvObj = recvObj;
|
||||
this->privateData->recvObj = SmartPointer<RecieverObject>(&recvObj);;
|
||||
}
|
||||
|
||||
NetworkClient::NetworkClient(RecieverObject recvObj, NetworkProtocolCallbackType type, unsigned int socket)
|
||||
{
|
||||
privateData = new PrivateData(socket);
|
||||
this->privateData->recvObj = recvObj;
|
||||
this->privateData->recvObj = SmartPointer<RecieverObject>(&recvObj);
|
||||
this->privateData->callbackType = type;
|
||||
}
|
||||
|
||||
NetworkClient::NetworkClient(const NetworkClient& obj)
|
||||
{
|
||||
this->privateData = new PrivateData();
|
||||
|
||||
this->privateData = obj.privateData;
|
||||
}
|
||||
|
||||
NetworkClient& NetworkClient::operator =(const NetworkClient& obj)
|
||||
{
|
||||
delete privateData;
|
||||
this->privateData = new PrivateData();
|
||||
this->privateData = obj.privateData;
|
||||
return *this;
|
||||
}
|
||||
|
||||
NetworkClient::~NetworkClient()
|
||||
{
|
||||
if(privateData)
|
||||
|
@ -241,7 +256,7 @@ void NetworkClient::Send(CustomProtocolObject& protocol)
|
|||
void NetworkClient::SetRecieverObject(RecieverObject recvObj, NetworkProtocolCallbackType type)
|
||||
{
|
||||
privateData->recvObjMutex.lock();
|
||||
privateData->recvObj = recvObj;
|
||||
privateData->recvObj = SmartPointer<RecieverObject>(&recvObj);
|
||||
privateData->callbackType = type;
|
||||
privateData->recvObjMutex.unlock();
|
||||
}
|
|
@ -27,6 +27,9 @@ namespace Oyster
|
|||
NetworkClient(unsigned int socket);
|
||||
NetworkClient(RecieverObject recvObj, NetworkProtocolCallbackType type);
|
||||
NetworkClient(RecieverObject recvObj, NetworkProtocolCallbackType type, unsigned int socket);
|
||||
NetworkClient(const NetworkClient& obj);
|
||||
|
||||
NetworkClient& operator =(const NetworkClient& obj);
|
||||
virtual ~NetworkClient();
|
||||
|
||||
bool Connect(unsigned short port, const char serverIP[]);
|
||||
|
|
|
@ -191,7 +191,7 @@ struct Translator::PrivateData
|
|||
protocol[i].value.netDouble = message.UnpackDouble(*bytes);
|
||||
break;
|
||||
case NetAttributeType_CharArray:
|
||||
//protocol[i].value.netCharPtr = message.UnpackStr(*bytes).c_str();
|
||||
protocol[i].value.netCharPtr = message.UnpackCStr(*bytes);
|
||||
break;
|
||||
default:
|
||||
numberOfUnknownTypes++;
|
||||
|
|
|
@ -240,6 +240,13 @@ double MessageHeader::UnpackDouble(OysterByte& bytes)
|
|||
return i;
|
||||
}
|
||||
|
||||
char* MessageHeader::UnpackCStr(OysterByte& bytes)
|
||||
{
|
||||
char* str = Packing::UnpackCStr(&bytes.GetByteArray()[size]);
|
||||
size += 2 + (int)strlen(str);
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string MessageHeader::UnpackStr(OysterByte& bytes)
|
||||
{
|
||||
std::string str = Packing::UnpackStr(&bytes.GetByteArray()[size]);
|
||||
|
|
|
@ -65,6 +65,7 @@ namespace Oyster
|
|||
float* UnpackFloat(unsigned int& elementCount, OysterByte& bytes);
|
||||
double UnpackDouble(OysterByte& bytes);
|
||||
|
||||
char* UnpackCStr(OysterByte& bytes);
|
||||
std::string UnpackStr(OysterByte& bytes);
|
||||
|
||||
//Sets the this->size to the first position in msg
|
||||
|
|
|
@ -279,6 +279,20 @@ namespace Oyster
|
|||
}
|
||||
|
||||
//string
|
||||
char* UnpackCStr(unsigned char buffer[])
|
||||
{
|
||||
short len = UnpackS(buffer);
|
||||
char* str = new char[len];
|
||||
|
||||
buffer += 2;
|
||||
for(int i = 0; i < len; i++)
|
||||
{
|
||||
str[i] = buffer[i];
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
std::string UnpackStr(unsigned char buffer[])
|
||||
{
|
||||
short len = UnpackS(buffer);
|
||||
|
|
|
@ -73,6 +73,7 @@ namespace Oyster
|
|||
double Unpackd(unsigned char buffer[]);
|
||||
|
||||
//string
|
||||
char* UnpackCStr(unsigned char buffer[]);
|
||||
std::string UnpackStr(unsigned char buffer[]);
|
||||
|
||||
long double Unpack754(unsigned __int64 i, unsigned bits, unsigned expbits);
|
||||
|
|
Loading…
Reference in New Issue