Handle register data in marshal/demarshal and packet reception

This commit is contained in:
simon.kagstrom 2010-02-07 09:37:21 +00:00
parent 6e3a5d74e0
commit 6b4014dfca
3 changed files with 41 additions and 0 deletions

View File

@ -682,6 +682,13 @@ bool Network::MarshalData(NetworkUpdate *p)
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
sp->server_id = htonl(sp->server_id);
} break;
case REGISTER_DATA:
{
NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data;
ds->key = htonl(ds->key);
ds->metadata = htonl(ds->metadata);
} break;
case LIST_PEERS:
{
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
@ -696,6 +703,7 @@ bool Network::MarshalData(NetworkUpdate *p)
peer->server_id = htonl(peer->server_id);
peer->version = htonl(peer->version);
peer->avatar = htonl(peer->avatar);
peer->screenshot_key = htonl(peer->screenshot_key);
}
lp->n_peers = htonl(lp->n_peers);
lp->your_port = htons(lp->your_port);
@ -791,6 +799,13 @@ bool Network::DeMarshalData(NetworkUpdate *p)
NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data;
sp->server_id = ntohl(sp->server_id);
} break;
case REGISTER_DATA:
{
NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data;
ds->key = ntohl(ds->key);
ds->metadata = ntohl(ds->metadata);
} break;
case LIST_PEERS:
{
NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data;
@ -807,6 +822,7 @@ bool Network::DeMarshalData(NetworkUpdate *p)
peer->server_id = ntohl(peer->server_id);
peer->version = ntohl(peer->version);
peer->avatar = ntohl(peer->avatar);
peer->screenshot_key = ntohl(peer->screenshot_key);
}
lp->your_port = ntohs(lp->your_port);
} break;
@ -922,6 +938,13 @@ bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst)
case LIST_PEERS:
{
} 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 PING:
{

View File

@ -17,6 +17,20 @@ DataStore::~DataStore()
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 *data)
{
@ -49,6 +63,7 @@ struct ds_data *DataStore::registerData(uint32_t key,
this->n_registeredData * sizeof(void*));
}
this->registeredData[i] = data;
data->key = key;
return NULL;
}

View File

@ -29,6 +29,9 @@ public:
*/
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,
* but the old is not freed