]> git.pond.sub.org Git - empserver/commitdiff
New journal event output
authorMarkus Armbruster <armbru@pond.sub.org>
Wed, 30 Jul 2008 00:38:48 +0000 (20:38 -0400)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 26 Jan 2010 21:44:20 +0000 (22:44 +0100)
To enable, set econfig key keep_journal to at least 2.  Output events
are *not* flushed to disk immediately.

Put it in Hvy Metal II now to gather real data for future testing of a
journal replay tool.

include/journal.h
src/lib/subs/journal.c
src/lib/subs/pr.c

index f5fcd93ca9d25e19d16d8cba9d2b02d85c32efc9..d2029d30b6656f98a10770706311fb0d47932f86 100644 (file)
 #ifndef JOURNAL_H
 #define JOURNAL_H
 
+struct player;                 /* FIXME temporary hack */
+
 int journal_startup(void);
 void journal_shutdown(void);
 int journal_reopen(void);
 void journal_login(void);
 void journal_logout(void);
 void journal_prng(unsigned);
+void journal_output(struct player *, int, char *);
 void journal_input(char *);
 void journal_command(char *);
 void journal_update(int);
index 245c24565730b785d5a74c66d039af2cd50f15cb..56361e971541177d3b38f80c1bcfa35b103a2dfa 100644 (file)
@@ -46,6 +46,7 @@
  *     logout CNUM
  *     command NAME
  *     input INPUT
+ *     output THREAD ID OUTPUT
  *     update ETU
  */
 
@@ -99,7 +100,8 @@ journal_entry(char *fmt, ...)
                fprintf(journal, "\\%03o", *p);
        }
        fputs("\n", journal);
-       fflush(journal);
+       if (fmt[0] != 'o')      /* FIXME disgusting hack */
+           fflush(journal);
        if (ferror(journal)) {
            logerror("Error writing journal (%s)", strerror(errno));
            clearerr(journal);
@@ -168,6 +170,17 @@ journal_logout(void)
     journal_entry("logout %d", player->cnum);
 }
 
+void
+journal_output(struct player *pl, int id, char *output)
+{
+    if (keep_journal < 2)
+       return;
+    if (pl && pl->state == PS_PLAYING)
+       journal_entry("output %d %d %s", pl->cnum, id, output);
+    else
+       journal_entry("output %p %d %s", pl, id, output);
+}
+
 void
 journal_input(char *input)
 {
index 1698d4c454ae8e7b4e289cfe184f2924af5bb41f..a5c2a20faaa8db7c0a60bcf4b6b5b239e099b8f9 100644 (file)
@@ -56,6 +56,7 @@
 #include "com.h"
 #include "empio.h"
 #include "file.h"
+#include "journal.h"
 #include "misc.h"
 #include "nat.h"
 #include "player.h"
@@ -242,6 +243,8 @@ pr_player(struct player *pl, int id, char *buf)
        }
     }
 
+    journal_output(pl, id, buf);
+
     if (player == pl) {
        while (io_output_if_queue_long(pl->iop,
                        pl->may_sleep == PLAYER_SLEEP_FREELY) > 0)
@@ -298,6 +301,8 @@ upr_player(struct player *pl, int id, char *buf)
        }
     }
 
+    journal_output(pl, id, buf);
+
     if (player == pl) {
        while (io_output_if_queue_long(pl->iop,
                        pl->may_sleep == PLAYER_SLEEP_FREELY) > 0)