Author: cazfi Date: Mon Mar 16 05:58:18 2015 New Revision: 28561 URL: http://svn.gna.org/viewcvs/freeciv?rev=28561&view=rev Log: Implemented memblock sending to json protocol, making also the delta protocol functional.
See patch #5934 Modified: trunk/common/dataio.h trunk/common/dataio_json.c trunk/common/dataio_json.h trunk/common/generate_packets.py Modified: trunk/common/dataio.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/dataio.h?rev=28561&r1=28560&r2=28561&view=diff ============================================================================== --- trunk/common/dataio.h (original) +++ trunk/common/dataio.h Mon Mar 16 05:58:18 2015 @@ -121,7 +121,7 @@ #ifndef FREECIV_JSON_CONNECTION /* Should be a function but we need some macro magic. */ -#define DIO_BV_GET(pdin, bv) \ +#define DIO_BV_GET(pdin, basekey, bv) \ dio_get_memory_raw((pdin), (bv).vec, sizeof((bv).vec)) #define DIO_GET(f, d, k, ...) dio_get_##f##_raw(d, ## __VA_ARGS__) Modified: trunk/common/dataio_json.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/dataio_json.c?rev=28561&r1=28560&r2=28561&view=diff ============================================================================== --- trunk/common/dataio_json.c (original) +++ trunk/common/dataio_json.c Mon Mar 16 05:58:18 2015 @@ -436,12 +436,19 @@ } /************************************************************************** -... + Send block of memory as byte array **************************************************************************/ void dio_put_memory_json(struct json_data_out *dout, char *key, const void *value, size_t size) { - /* TODO: implement */ + int i; + char fullkey[512]; + + for (i = 0; i < size; i++) { + fc_snprintf(fullkey, sizeof(fullkey), "%s_%d", key, i); + + dio_put_uint8_json(dout, fullkey, ((unsigned char *)value)[i]); + } } /************************************************************************** @@ -606,12 +613,25 @@ } /************************************************************************** -... + Receive block of memory as byte array **************************************************************************/ bool dio_get_memory_json(json_t *json_packet, char *key, void *dest, size_t dest_size) { - /* TODO: implement */ + int i; + char fullkey[512]; + + for (i = 0; i < dest_size; i++) { + int val; + + fc_snprintf(fullkey, sizeof(fullkey), "%s_%d", key, i); + + if (!dio_get_uint8_json(json_packet, fullkey, &val)) { + return FALSE; + } + ((unsigned char *)dest)[i] = val; + } + return TRUE; } Modified: trunk/common/dataio_json.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/dataio_json.h?rev=28561&r1=28560&r2=28561&view=diff ============================================================================== --- trunk/common/dataio_json.h (original) +++ trunk/common/dataio_json.h Mon Mar 16 05:58:18 2015 @@ -74,8 +74,8 @@ bool dio_get_uint16_vec8_json(json_t *json_packet, char *key, int **values, int stop_value); /* Should be a function but we need some macro magic. */ -#define DIO_BV_GET(pdin, bv) \ - dio_get_memory_json(pc->json_packet, "mem", (bv).vec, sizeof((bv).vec)) +#define DIO_BV_GET(pdin, basekey, bv) \ + dio_get_memory_json(pc->json_packet, basekey, (bv).vec, sizeof((bv).vec)) #define DIO_GET(f, d, k, ...) dio_get_##f##_json(pc->json_packet, k, ## __VA_ARGS__) Modified: trunk/common/generate_packets.py URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/generate_packets.py?rev=28561&r1=28560&r2=28561&view=diff ============================================================================== --- trunk/common/generate_packets.py (original) +++ trunk/common/generate_packets.py Mon Mar 16 05:58:18 2015 @@ -452,7 +452,7 @@ RECEIVE_PACKET_FIELD_ERROR(%(name)s); }'''%self.__dict__ if self.dataio_type=="bitvector": - return '''if (!DIO_BV_GET(&din, real_packet->%(name)s)) { + return '''if (!DIO_BV_GET(&din, \"%s(name)s\", real_packet->%(name)s)) { RECEIVE_PACKET_FIELD_ERROR(%(name)s); }'''%self.__dict__ if self.dataio_type in ["string","bit_string","city_map"] and \ @@ -937,7 +937,7 @@ struct %(packet_name)s *old; struct genhash **hash = pc->phs.received + %(type)s; ''' - delta_body1="\n DIO_BV_GET(&din, fields);\n" + delta_body1="\n DIO_BV_GET(&din, \"fields\", fields);\n" body1="" for field in self.key_fields: body1=body1+prefix(" ",field.get_get())+"\n" _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits