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; 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:
{ {

View File

@ -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;
} }

View File

@ -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