Hi
I am having trouble attaching a std::shared_ptr to a void* member inside a struct for the Enet library. The netevent.peer->data member is of type void*, I want to be able to create a shared_ptr and set it to netevent.peer->data. When I recieve packets I can cast netevent.peer->data back to a shared_ptr and get the members out. But all the tricks i've tried so far has crashed the application.
Any input?
case ENET_EVENT_TYPE_CONNECT:
{
char buffer[64];
in_addr addr;
long long ipandport = (netevent.peer->address.host << 16) | netevent.peer->address.port; //Unique ID
std::shared_ptr<PeerData> spNewPeer(new PeerData);
spNewPeer->ipandport = ipandport;
spNewPeer->peer = netevent.peer;
addr.S_un.S_addr = netevent.peer->address.host;
sprintf_s(buffer, "%s:%d", inet_ntoa(addr), netevent.peer->address.port);
printf("A new client connected from %s.\n", buffer);
spNewPeer->sipandport = string(buffer);
netevent.peer->data = &(*spNewPeer); //assigning, might be bad....
cout << "Registered user: " << ipandport << endl;
break;
}
case ENET_EVENT_TYPE_RECEIVE:
{
std::shared_ptr<PeerData> spPeer(netevent.peer->data);
cout << "A packet of length " << netevent.packet->dataLength
<< " containing " << netevent.packet->data
<< " was received from " << spPeer->sipandport //causes compile errors, cannot convert parameter 1 from 'void *' to 'PeerData *'
<< " on channel" << netevent.channelID << "." << endl;
if(netevent.packet != NULL){
enet_packet_destroy (netevent.packet);
}
break;
}