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

Reply via email to