Author: cazfi
Date: Thu Aug 13 19:08:53 2015
New Revision: 29491

URL: http://svn.gna.org/viewcvs/freeciv?rev=29491&view=rev
Log:
Send current turns History Report to all clients connecting during the turn.

See patch #6195

Modified:
    branches/S2_6/server/connecthand.c
    branches/S2_6/server/report.c
    branches/S2_6/server/report.h

Modified: branches/S2_6/server/connecthand.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/connecthand.c?rev=29491&r1=29490&r2=29491&view=diff
==============================================================================
--- branches/S2_6/server/connecthand.c  (original)
+++ branches/S2_6/server/connecthand.c  Thu Aug 13 19:08:53 2015
@@ -303,6 +303,9 @@
     reset_all_start_commands(TRUE);
     (void) send_server_info_to_metaserver(META_INFO);
   }
+
+  send_current_history_report(pconn->self);
+
   conn_compression_thaw(pconn);
 }
 

Modified: branches/S2_6/server/report.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/report.c?rev=29491&r1=29490&r2=29491&view=diff
==============================================================================
--- branches/S2_6/server/report.c       (original)
+++ branches/S2_6/server/report.c       Thu Aug 13 19:08:53 2015
@@ -59,6 +59,10 @@
   int last_turn;
   struct plrdata_slot *plrdata;
 };
+
+/* Have to be initialized to value less than -1 so it doesn't seem like report 
was created at
+ * the end of previous turn in the beginning to turn 0. */
+struct history_report latest_history_report = { -2 };
 
 static struct logging_civ_score *score_log = NULL;
 
@@ -227,15 +231,15 @@
 }
 
 /**************************************************************************
-  Publish historian report.
-**************************************************************************/
-static void historian_generic(enum historian_type which_news)
+  Construct Historian Report
+**************************************************************************/
+static void historian_generic(struct history_report *report,
+                              enum historian_type which_news)
 {
   int i, j = 0, rank = 0;
-  char buffer[4096];
-  char title[1024];
   struct player_score_entry size[player_count()];
 
+  report->turn = game.info.turn;
   players_iterate(pplayer) {
     if (GOOD_PLAYER(pplayer)) {
       switch(which_news) {
@@ -264,7 +268,7 @@
   } players_iterate_end;
 
   qsort(size, j, sizeof(size[0]), secompare);
-  buffer[0] = '\0';
+  report->body[0] = '\0';
   for (i = 0; i < j; i++) {
     if (i > 0 && size[i].value < size[i - 1].value) {
       /* since i < j, only top entry reigns Supreme */
@@ -274,17 +278,28 @@
       /* clamp to final entry */
       rank = ARRAY_SIZE(ranking) - 1;
     }
-    cat_snprintf(buffer, sizeof(buffer),
+    cat_snprintf(report->body, REPORT_BODYSIZE,
                 _(ranking[rank]),
                 i + 1,
                 nation_plural_for_player(size[i].player));
-    fc_strlcat(buffer, "\n", sizeof(buffer));
-  }
-  fc_snprintf(title, sizeof(title), _(historian_message[which_news]),
+    fc_strlcat(report->body, "\n", REPORT_BODYSIZE);
+  }
+  fc_snprintf(report->title, REPORT_TITLESIZE, 
_(historian_message[which_news]),
               calendar_text(),
               _(historian_name[fc_rand(ARRAY_SIZE(historian_name))]));
-  page_conn_etype(game.est_connections, _("Historian Publishes!"),
-                 title, buffer, E_BROADCAST_REPORT);
+}
+
+/**************************************************************************
+  Send history report of this turn.
+**************************************************************************/
+void send_current_history_report(struct conn_list *dest)
+{
+  /* History report is actually constructed at the end of previous turn. */
+  if (latest_history_report.turn >= game.info.turn - 1) {
+    page_conn_etype(dest, _("Historian Publishes!"),
+                    latest_history_report.title, latest_history_report.body,
+                    E_BROADCAST_REPORT);
+  }
 }
 
 /**************************************************************************
@@ -1283,6 +1298,8 @@
                                    + player_slot_index(pslot);
     plrdata->name = NULL;
   } player_slots_iterate_end;
+
+  latest_history_report.turn = -2;
 }
 
 /**************************************************************************
@@ -1525,7 +1542,8 @@
   game.server.scoreturn = (game.info.turn + GAME_DEFAULT_SCORETURN
                            + fc_rand(GAME_DEFAULT_SCORETURN));
 
-  historian_generic(game.server.scoreturn % HISTORIAN_LAST);
+  historian_generic(&latest_history_report, game.server.scoreturn % 
HISTORIAN_LAST);
+  send_current_history_report(game.est_connections);
 }
 
 /**************************************************************************

Modified: branches/S2_6/server/report.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/report.h?rev=29491&r1=29490&r2=29491&view=diff
==============================================================================
--- branches/S2_6/server/report.h       (original)
+++ branches/S2_6/server/report.h       Thu Aug 13 19:08:53 2015
@@ -18,6 +18,16 @@
 struct connection;
 struct conn_list;
 
+#define REPORT_TITLESIZE 1024
+#define REPORT_BODYSIZE 4096
+
+struct history_report
+{
+  int turn;
+  char title[REPORT_TITLESIZE];
+  char body[REPORT_BODYSIZE];
+};
+
 void page_conn(struct conn_list *dest, const char *caption,
                const char *headline, const char *lines);
 
@@ -26,6 +36,7 @@
 void log_civ_score_now(void);
 
 void make_history_report(void);
+void send_current_history_report(struct conn_list *dest);
 void report_wonders_of_the_world(struct conn_list *dest);
 void report_top_five_cities(struct conn_list *dest);
 bool is_valid_demography(const char *demography, int *error);


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to