mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-22 19:39:24 +01:00
Handle register data in marshal/demarshal and packet reception
This commit is contained in:
parent
6e3a5d74e0
commit
6b4014dfca
@ -682,6 +682,13 @@ bool Network::MarshalData(NetworkUpdate *p)
|
|||||||
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
|
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
|
||||||
sp->server_id = htonl(sp->server_id);
|
sp->server_id = htonl(sp->server_id);
|
||||||
} break;
|
} break;
|
||||||
|
case REGISTER_DATA:
|
||||||
|
{
|
||||||
|
NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data;
|
||||||
|
|
||||||
|
ds->key = htonl(ds->key);
|
||||||
|
ds->metadata = htonl(ds->metadata);
|
||||||
|
} break;
|
||||||
case LIST_PEERS:
|
case LIST_PEERS:
|
||||||
{
|
{
|
||||||
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
|
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
|
||||||
@ -696,6 +703,7 @@ bool Network::MarshalData(NetworkUpdate *p)
|
|||||||
peer->server_id = htonl(peer->server_id);
|
peer->server_id = htonl(peer->server_id);
|
||||||
peer->version = htonl(peer->version);
|
peer->version = htonl(peer->version);
|
||||||
peer->avatar = htonl(peer->avatar);
|
peer->avatar = htonl(peer->avatar);
|
||||||
|
peer->screenshot_key = htonl(peer->screenshot_key);
|
||||||
}
|
}
|
||||||
lp->n_peers = htonl(lp->n_peers);
|
lp->n_peers = htonl(lp->n_peers);
|
||||||
lp->your_port = htons(lp->your_port);
|
lp->your_port = htons(lp->your_port);
|
||||||
@ -791,6 +799,13 @@ bool Network::DeMarshalData(NetworkUpdate *p)
|
|||||||
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
|
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
|
||||||
sp->server_id = ntohl(sp->server_id);
|
sp->server_id = ntohl(sp->server_id);
|
||||||
} break;
|
} break;
|
||||||
|
case REGISTER_DATA:
|
||||||
|
{
|
||||||
|
NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data;
|
||||||
|
|
||||||
|
ds->key = ntohl(ds->key);
|
||||||
|
ds->metadata = ntohl(ds->metadata);
|
||||||
|
} break;
|
||||||
case LIST_PEERS:
|
case LIST_PEERS:
|
||||||
{
|
{
|
||||||
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
|
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
|
||||||
@ -807,6 +822,7 @@ bool Network::DeMarshalData(NetworkUpdate *p)
|
|||||||
peer->server_id = ntohl(peer->server_id);
|
peer->server_id = ntohl(peer->server_id);
|
||||||
peer->version = ntohl(peer->version);
|
peer->version = ntohl(peer->version);
|
||||||
peer->avatar = ntohl(peer->avatar);
|
peer->avatar = ntohl(peer->avatar);
|
||||||
|
peer->screenshot_key = ntohl(peer->screenshot_key);
|
||||||
}
|
}
|
||||||
lp->your_port = ntohs(lp->your_port);
|
lp->your_port = ntohs(lp->your_port);
|
||||||
} break;
|
} break;
|
||||||
@ -922,6 +938,13 @@ bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst)
|
|||||||
case LIST_PEERS:
|
case LIST_PEERS:
|
||||||
{
|
{
|
||||||
} break;
|
} break;
|
||||||
|
case REGISTER_DATA:
|
||||||
|
{
|
||||||
|
NetworkUpdateRegisterData *rd = (NetworkUpdateRegisterData *)p->data;
|
||||||
|
|
||||||
|
DataStore::ds->registerNetworkData(rd->key, rd->metadata, rd->data,
|
||||||
|
p->size - (sizeof(NetworkUpdateRegisterData) + sizeof(NetworkUpdate)));
|
||||||
|
} break;
|
||||||
case BANDWIDTH_PING:
|
case BANDWIDTH_PING:
|
||||||
case PING:
|
case PING:
|
||||||
{
|
{
|
||||||
|
@ -17,6 +17,20 @@ DataStore::~DataStore()
|
|||||||
free(this->registeredData);
|
free(this->registeredData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ds_data *DataStore::registerNetworkData(uint32_t key, uint32_t metadata,
|
||||||
|
void *data, size_t data_sz)
|
||||||
|
{
|
||||||
|
struct ds_data *out;
|
||||||
|
|
||||||
|
out = (struct ds_data *)xmalloc(sizeof(struct ds_data) + data_sz);
|
||||||
|
out->key = key;
|
||||||
|
out->metadata = metadata;
|
||||||
|
|
||||||
|
memcpy(out->data, data, data_sz);
|
||||||
|
|
||||||
|
return this->registerData(key, out);
|
||||||
|
}
|
||||||
|
|
||||||
struct ds_data *DataStore::registerData(uint32_t key,
|
struct ds_data *DataStore::registerData(uint32_t key,
|
||||||
struct ds_data *data)
|
struct ds_data *data)
|
||||||
{
|
{
|
||||||
@ -49,6 +63,7 @@ struct ds_data *DataStore::registerData(uint32_t key,
|
|||||||
this->n_registeredData * sizeof(void*));
|
this->n_registeredData * sizeof(void*));
|
||||||
}
|
}
|
||||||
this->registeredData[i] = data;
|
this->registeredData[i] = data;
|
||||||
|
data->key = key;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,9 @@ public:
|
|||||||
*/
|
*/
|
||||||
struct ds_data *registerData(uint32_t key, struct ds_data *data);
|
struct ds_data *registerData(uint32_t key, struct ds_data *data);
|
||||||
|
|
||||||
|
struct ds_data *registerNetworkData(uint32_t key, uint32_t metadata,
|
||||||
|
void *data, size_t data_sz);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Embed existing data into a data store. The new data is reallocated,
|
* Embed existing data into a data store. The new data is reallocated,
|
||||||
* but the old is not freed
|
* but the old is not freed
|
||||||
|
Loading…
Reference in New Issue
Block a user