Feature #496 » 0003-json-protocol-allow-object-creation-in-packet-code.patch
common/generate_packets.py | ||
---|---|---|
{location.json_subloc}->number = -1;
|
||
/* Create the diff array element. */
|
||
e |= DIO_PUT(farray, &dout, &field_addr, 2);
|
||
e |= DIO_PUT(object, &dout, &field_addr);
|
||
/* Enter diff array element (start at the index address). */
|
||
{location.json_subloc}->number = count_{location.index}++;
|
||
{location.json_subloc}->sub_location = plocation_elem_new(0);
|
||
{location.json_subloc}->sub_location = plocation_field_new("index");
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
/* Write the index */
|
||
... | ... | |
#ifdef FREECIV_JSON_CONNECTION
|
||
/* Content address. */
|
||
{location.json_subloc}->sub_location->number = 1;
|
||
{location.json_subloc}->sub_location->name = "data";
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
{inner_put}\
|
||
... | ... | |
{location.json_subloc}->number = -1;
|
||
/* Create the terminating diff array element. */
|
||
e |= DIO_PUT(farray, &dout, &field_addr, 1);
|
||
e |= DIO_PUT(object, &dout, &field_addr);
|
||
/* Enter diff array element (start at the index address). */
|
||
{location.json_subloc}->number = count_{location.index};
|
||
{location.json_subloc}->sub_location = plocation_elem_new(0);
|
||
{location.json_subloc}->sub_location = plocation_field_new("index");
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
/* Write the sentinel value */
|
||
... | ... | |
/* Enter array. */
|
||
{location.json_subloc} = plocation_elem_new(0);
|
||
/* Enter diff array element. */
|
||
{location.json_subloc}->sub_location = plocation_elem_new(0);
|
||
{location.json_subloc}->sub_location = plocation_field_new(nullptr);
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
while (TRUE) {{
|
||
... | ... | |
/* Move to the next diff array element. */
|
||
{location.json_subloc}->number++;
|
||
/* Start at the index address. */
|
||
{location.json_subloc}->sub_location->number = 0;
|
||
{location.json_subloc}->sub_location->name = "index";
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
/* Read next index */
|
||
... | ... | |
#ifdef FREECIV_JSON_CONNECTION
|
||
/* Content address. */
|
||
{location.json_subloc}->sub_location->number = 1;
|
||
{location.json_subloc}->sub_location->name = "data";
|
||
#endif /* FREECIV_JSON_CONNECTION */
|
||
{inner_get}\
|
common/networking/dataio_json.c | ||
---|---|---|
e = json_array_set_new(item, location->number, data);
|
||
}
|
||
} else {
|
||
// PTZ200718 handles last element get case...
|
||
// better here than all around put_array-diff algo ?
|
||
size_t n = (location->number == -1)
|
||
? (json_array_size(item) - 1)
|
||
: location->number;
|
||
json_t *sub_item = json_array_get(item, n);
|
||
if (json_is_array(sub_item)) {
|
||
e = plocation_write_data(sub_item,
|
||
location->sub_location, data);
|
||
} else {
|
||
log_error("ERROR:plocation_write_elem:array not found for sub location:"
|
||
"%s @[" SIZE_T_PRINTF "]",
|
||
json_dumps(item, JSON_DECODE_ANY), location->number);
|
||
}
|
||
e = plocation_write_data(json_array_get(item, n),
|
||
location->sub_location, data);
|
||
}
|
||
return e;
|
||
... | ... | |
return e;
|
||
}
|
||
/**********************************************************************//**
|
||
Create an empty JSON object.
|
||
**************************************************************************/
|
||
int dio_put_object_json(struct json_data_out *dout,
|
||
const struct plocation *location)
|
||
{
|
||
int e = 0;
|
||
if (dout->json) {
|
||
e |= plocation_write_data(dout->json, location, json_object());
|
||
} else {
|
||
/* No caller needs this */
|
||
}
|
||
return e;
|
||
}
|
||
/**********************************************************************//**
|
||
Insert uint32 value.
|
||
**************************************************************************/
|
common/networking/dataio_json.h | ||
---|---|---|
/* puts */
|
||
int dio_put_farray_json(struct json_data_out *dout,
|
||
const struct plocation *location, int size);
|
||
int dio_put_object_json(struct json_data_out *dout,
|
||
const struct plocation *location);
|
||
int dio_put_type_json(struct json_data_out *dout, enum data_type type,
|
||
const struct plocation *location,
|