static void* np_byte_read(byte_array_t* bytes, size_t* offset) { // Read the name. int name_len; byte_array_read_ints(bytes, 1, &name_len, offset); char name[name_len+1]; byte_array_read_chars(bytes, name_len, name, offset); name[name_len] = '\0'; // Read the offsets, indices, weights. int num_pairs, num_weights; byte_array_read_ints(bytes, 1, &num_pairs, offset); int* pairs = polymec_malloc(sizeof(int) * 2 * num_pairs); byte_array_read_ints(bytes, 2*num_pairs, pairs, offset); byte_array_read_ints(bytes, 1, &num_weights, offset); real_t* weights = NULL; if (num_weights > 0) byte_array_read_real_ts(bytes, num_weights, weights, offset); // Exchanger stuff. serializer_t* ser = exchanger_serializer(); exchanger_t* ex = serializer_read(ser, bytes, offset); return neighbor_pairing_new(name, num_pairs, pairs, weights, ex); }
/* * Reads all the updates bnroadcasted by the server and updates the company's map * 1 - for each message in the queue => apply update to map; */ void updateMap() { void* package; int packageType; CityUpdatePackage *update; log_debug("Company %d updating map", company->id); do { package = serializer_read(company->id + 1, serverId, &packageType); if (packageType == PACKAGE_TYPE_CITY_UPDATE) { update = (CityUpdatePackage*) package; log_debug("[Company %d] update= cityId = %d - temId = %d - amoount = %d\n", company->id, update->cityId, update->itemId, update->amount); City *city = map->city[update->cityId]; city->itemStock[update->itemId] += update->amount; } } while(package != NULL); }
void MulticastDataLink::syn_received_no_session(MulticastPeer source, ACE_Message_Block* data, bool swap_bytes) { Serializer serializer_read(data, swap_bytes); MulticastPeer local_peer; serializer_read >> local_peer; if (local_peer != local_peer_) { return; } VDBG_LVL((LM_DEBUG, "(%P|%t) MulticastDataLink[%C]::syn_received_no_session " "send_synack local 0x%x remote 0x%x\n", config_->name().c_str(), local_peer, source), 2); ACE_Message_Block* synack_data = new ACE_Message_Block(sizeof(MulticastPeer)); Serializer serializer_write(synack_data); serializer_write << source; DataSampleHeader header; ACE_Message_Block* control = create_control(MULTICAST_SYNACK, header, synack_data); const int error = send_control(header, control); if (error != SEND_CONTROL_OK) { ACE_ERROR((LM_ERROR, "(%P|%t) MulticastDataLink::syn_received_no_session: " "ERROR: send_control failed: %d!\n", error)); return; } transport_->passive_connection(local_peer, source); }