tImproved logging functions added - vaccinewars - be a doctor and try to vaccin… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9911e27ee2e84f5bac7aa5707077b3e4497d9f0b | |
parent 64f33169c52a969f7eaa562684bce2d19f89dd4c | |
Author: Ben Webb <[email protected]> | |
Date: Sun, 10 Jun 2001 01:19:26 +0000 | |
Improved logging functions added | |
Diffstat: | |
M ChangeLog | 1 + | |
M src/curses_client.c | 2 +- | |
M src/dopewars.c | 65 +++++++++++++++++++++++++++++… | |
M src/dopewars.h | 10 +++++++++- | |
M src/gtk_client.c | 2 +- | |
M src/message.c | 10 +++++++--- | |
M src/message.h | 2 +- | |
M src/serverside.c | 102 ++++++++++++++++++-----------… | |
M src/winmain.c | 21 +++++++++++++-------- | |
9 files changed, 156 insertions(+), 59 deletions(-) | |
--- | |
diff --git a/ChangeLog b/ChangeLog | |
t@@ -1,4 +1,5 @@ | |
cvs | |
+ - Improved logging in server via. LogLevel and LogTimestamp variables | |
- Metaserver (both client and server) moved to SourceForge | |
- Icons (courtesy of Ocelot Mantis) and GNOME desktop entry added | |
diff --git a/src/curses_client.c b/src/curses_client.c | |
t@@ -1825,7 +1825,7 @@ void CursesLoop() { | |
SocketWriteTestPt = NULL; | |
/* Make the GLib log messages display nicely */ | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING, | |
+ g_log_set_handler(NULL,LogMask()|G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING, | |
LogMessage,NULL); | |
display_intro(); | |
diff --git a/src/dopewars.c b/src/dopewars.c | |
t@@ -37,6 +37,7 @@ | |
#include <curses_client.h> | |
#include <gtk_client.h> | |
#include <glib.h> | |
+#include <stdarg.h> | |
#include "dopeos.h" | |
#include "message.h" | |
#include "serverside.h" | |
t@@ -161,6 +162,9 @@ int NumTurns=31; | |
int PlayerArmour=100,BitchArmour=50; | |
+int LogLevel=2; | |
+gchar *LogTimestamp=NULL; | |
+ | |
struct GLOBALS Globals[NUMGLOB] = { | |
/* The following strings are the helptexts for all the options that can be | |
set in a dopewars configuration file, or in the server. See | |
t@@ -202,6 +206,12 @@ struct GLOBALS Globals[NUMGLOB] = { | |
{ &NumTurns,NULL,NULL,NULL,"NumTurns", | |
N_("No. of game turns (if 0, game never ends)"), | |
NULL,NULL,0,"",NULL,NULL }, | |
+ { &LogLevel,NULL,NULL,NULL,"LogLevel", | |
+ N_("Controls the number of log messages produced"), | |
+ NULL,NULL,0,"",NULL,NULL }, | |
+ { NULL,NULL,&LogTimestamp,NULL,"LogTimestamp", | |
+ N_("strftime() format string for log timestamps"), | |
+ NULL,NULL,0,"",NULL,NULL }, | |
{ &Sanitized,NULL,NULL,NULL,"Sanitized",N_("Random events are sanitized"), | |
NULL,NULL,0,"",NULL,NULL }, | |
{ &DrugValue,NULL,NULL,NULL,"DrugValue", | |
t@@ -622,7 +632,7 @@ GSList *AddPlayer(int fd,Player *NewPlayer,GSList *First) { | |
NewPlayer->CoatSize=100; | |
NewPlayer->Flags=0; | |
#if NETWORKING | |
- InitNetworkBuffer(&NewPlayer->NetBuf,'\n'); | |
+ InitNetworkBuffer(&NewPlayer->NetBuf,'\n','\r'); | |
if (Server) BindNetworkBufferToSocket(&NewPlayer->NetBuf,fd); | |
#endif | |
InitAbilities(NewPlayer); | |
t@@ -1056,6 +1066,21 @@ void RemoveAllEntries(DopeList *List,Player *Play) { | |
RemoveListEntry(List,i); | |
} | |
} | |
+ | |
+void dopelog(int loglevel,const gchar *format,...) { | |
+/* General logging function. All messages should be given a loglevel, */ | |
+/* from 0 to 5 (0=vital, 2=normal, 5=maximum debugging output). This */ | |
+/* is essentially just a wrapper around the GLib g_log function. */ | |
+ va_list args; | |
+ va_start (args,format); | |
+ g_logv(G_LOG_DOMAIN,1<<(loglevel+G_LOG_LEVEL_USER_SHIFT),format,args); | |
+ va_end (args); | |
+} | |
+ | |
+GLogLevelFlags LogMask() { | |
+/* Returns the bitmask necessary to catch all custom log messages */ | |
+ return ((1<<(MAXLOG))-1) << G_LOG_LEVEL_USER_SHIFT; | |
+} | |
void ResizeLocations(int NewNum) { | |
int i; | |
t@@ -1575,9 +1600,11 @@ void SetupParameters() { | |
/* Set hard-coded default values */ | |
g_free(HiScoreFile); g_free(ServerName); g_free(Pager); | |
+ g_free(LogTimestamp); | |
HiScoreFile=g_strdup_printf("%s/dopewars.sco",DATADIR); | |
ServerName=g_strdup("localhost"); | |
Pager=g_strdup("more"); | |
+ LogTimestamp=g_strdup("[%H:%M:%S] "); | |
CopyNames(&Names,&DefaultNames); | |
CopyMetaServer(&MetaServer,&DefaultMetaServer); | |
t@@ -1695,8 +1722,42 @@ int GeneralStartup(int argc,char *argv[]) { | |
return 0; | |
} | |
+GString *GetLogString(GLogLevelFlags log_level,const gchar *message) { | |
+/* Returns the text to be displayed in a log message, if any. */ | |
+ GString *text; | |
+ gchar TimeBuf[80]; | |
+ gint i; | |
+ time_t tim; | |
+ struct tm *timep; | |
+ | |
+ text=g_string_new(""); | |
+ if (LogTimestamp) { | |
+ tim=time(NULL); | |
+ timep=localtime(&tim); | |
+ strftime(TimeBuf,80,LogTimestamp,timep); | |
+ TimeBuf[79]='\0'; | |
+ g_string_append(text,TimeBuf); | |
+ } | |
+ | |
+ for (i=0;i<MAXLOG;i++) if (log_level&(1<<(G_LOG_LEVEL_USER_SHIFT+i))) { | |
+ if (i>LogLevel) { g_string_free(text,TRUE); return NULL; } | |
+ g_string_sprintfa(text,"%d: ",i); | |
+ } | |
+ g_string_append(text,message); | |
+ return text; | |
+} | |
+ | |
#ifndef CYGWIN | |
+static void ServerLogMessage(const gchar *log_domain,GLogLevelFlags log_level, | |
+ const gchar *message,gpointer user_data) { | |
+ GString *text; | |
+ text=GetLogString(log_level,message); | |
+ if (text) { | |
+ g_print("%s\n",text->str); g_string_free(text,TRUE); | |
+ } | |
+} | |
+ | |
/* Standard program entry - Win32 uses WinMain() instead, in winmain.c */ | |
int main(int argc,char *argv[]) { | |
#ifdef ENABLE_NLS | |
t@@ -1715,6 +1776,8 @@ int main(int argc,char *argv[]) { | |
gtk_init(&argc,&argv); | |
GuiServerLoop(); | |
#else | |
+/* Deal with dopelog() stuff nicely */ | |
+ g_log_set_handler(NULL,LogMask(),ServerLogMessage,NULL); | |
ServerLoop(); | |
#endif | |
} else if (AIPlayer) { | |
diff --git a/src/dopewars.h b/src/dopewars.h | |
t@@ -127,6 +127,10 @@ extern struct NAMES Names; | |
extern struct METASERVER MetaServer; | |
extern int NumTurns; | |
extern int PlayerArmour,BitchArmour; | |
+extern int LogLevel; | |
+extern gchar *LogTimestamp; | |
+ | |
+#define MAXLOG 6 | |
#define DM_NONE 0 | |
#define DM_STREET 1 | |
t@@ -284,6 +288,7 @@ typedef struct tagConnBuf { | |
typedef struct tagNetworkBuffer { | |
int fd; /* File descriptor of the socket */ | |
char Terminator; /* Character that separates messages */ | |
+ char StripChar; /* Character that should be removed from messages */ | |
ConnBuf ReadBuf; /* New data, waiting for the application */ | |
ConnBuf WriteBuf; /* Data waiting to be written to the wire */ | |
gboolean WaitConnect; /* TRUE if a non-blocking connect is in progress */ | |
t@@ -332,7 +337,7 @@ typedef struct tag_serverdata { | |
char *Comment,*Version,*Update,*UpSince; | |
} ServerData; | |
-#define NUMGLOB 87 | |
+#define NUMGLOB 89 | |
struct GLOBALS { | |
int *IntVal; | |
price_t *PriceVal; | |
t@@ -418,4 +423,7 @@ void PrintConfigValue(int GlobalIndex,int StructIndex,gboo… | |
void SetConfigValue(int GlobalIndex,int StructIndex,gboolean IndexGiven, | |
GScanner *scanner); | |
gboolean IsCop(Player *Play); | |
+void dopelog(int loglevel,const gchar *format,...); | |
+GLogLevelFlags LogMask(); | |
+GString *GetLogString(GLogLevelFlags log_level,const gchar *message); | |
#endif | |
diff --git a/src/gtk_client.c b/src/gtk_client.c | |
t@@ -1702,7 +1702,7 @@ char GtkLoop(int *argc,char **argv[],char ReturnOnFail) { | |
SocketWriteTestPt = SetSocketWriteTest; | |
/* Have the GLib log messages pop up in a nice dialog box */ | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING, | |
+ g_log_set_handler(NULL,LogMask()|G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING, | |
LogMessage,NULL); | |
ClientData.PlayerName=NULL; | |
diff --git a/src/message.c b/src/message.c | |
t@@ -279,12 +279,14 @@ gboolean HaveAbility(Player *Play,gint Type) { | |
} | |
#if NETWORKING | |
-void InitNetworkBuffer(NetworkBuffer *NetBuf,char Terminator) { | |
+void InitNetworkBuffer(NetworkBuffer *NetBuf,char Terminator,char StripChar) { | |
/* Initialises the passed network buffer, ready for use. Messages sent */ | |
/* or received on the buffered connection will be terminated by the */ | |
-/* given character. */ | |
+/* given character, and if they end in "StripChar" it will be removed */ | |
+/* before the messages are sent or received. */ | |
NetBuf->fd=-1; | |
NetBuf->Terminator=Terminator; | |
+ NetBuf->StripChar=StripChar; | |
NetBuf->ReadBuf.Data=NetBuf->WriteBuf.Data=NULL; | |
NetBuf->ReadBuf.Length=NetBuf->WriteBuf.Length=0; | |
NetBuf->ReadBuf.DataPresent=NetBuf->WriteBuf.DataPresent=0; | |
t@@ -329,7 +331,7 @@ void ShutdownNetworkBuffer(NetworkBuffer *NetBuf) { | |
g_free(NetBuf->ReadBuf.Data); | |
g_free(NetBuf->WriteBuf.Data); | |
- InitNetworkBuffer(NetBuf,NetBuf->Terminator); | |
+ InitNetworkBuffer(NetBuf,NetBuf->Terminator,NetBuf->StripChar); | |
} | |
void SetSelectForNetworkBuffer(NetworkBuffer *NetBuf,fd_set *readfds, | |
t@@ -445,6 +447,8 @@ gchar *GetWaitingMessage(NetworkBuffer *NetBuf) { | |
if (!SepPt) return NULL; | |
*SepPt='\0'; | |
MessageLen=SepPt-conn->Data+1; | |
+ SepPt--; | |
+ if (NetBuf->StripChar && *SepPt==NetBuf->StripChar) *SepPt='\0'; | |
NewMessage=g_new(gchar,MessageLen); | |
memcpy(NewMessage,conn->Data,MessageLen); | |
if (MessageLen<conn->DataPresent) { | |
diff --git a/src/message.h b/src/message.h | |
t@@ -119,7 +119,7 @@ char *StartConnect(int *fd,gchar *RemoteHost,unsigned Remo… | |
gboolean NonBlocking); | |
char *FinishConnect(int fd); | |
-void InitNetworkBuffer(NetworkBuffer *NetBuf,char Terminator); | |
+void InitNetworkBuffer(NetworkBuffer *NetBuf,char Terminator,char StripChar); | |
gboolean IsNetworkBufferActive(NetworkBuffer *NetBuf); | |
void BindNetworkBufferToSocket(NetworkBuffer *NetBuf,int fd); | |
gboolean StartNetworkBufferConnect(NetworkBuffer *NetBuf,gchar *RemoteHost, | |
diff --git a/src/serverside.c b/src/serverside.c | |
t@@ -149,7 +149,8 @@ void RegisterWithMetaServer(gboolean Up,gboolean SendData, | |
if (!MetaServer.Active || !NotifyMetaServer || WantQuit) return; | |
if (MetaMinTimeout > time(NULL) && RespectTimeout) { | |
- g_print("Attempt to connect to metaserver too frequently - waiting for n… | |
+ dopelog(3,_("Attempt to connect to metaserver too frequently " | |
+ "- waiting for next timeout")); | |
MetaPlayerPending=TRUE; | |
return; | |
} | |
t@@ -167,7 +168,8 @@ void RegisterWithMetaServer(gboolean Up,gboolean SendData, | |
} | |
if (StartNetworkBufferConnect(&MetaNetBuf,MetaName,MetaPort)) { | |
- g_print("Waiting for metaserver connect to %s:%d...\n",MetaName,MetaPort… | |
+ dopelog(2,_("Waiting for metaserver connect to %s:%d..."),MetaName, | |
+ MetaPort); | |
} else return; | |
MetaPlayerPending=FALSE; | |
text=g_string_new(""); | |
t@@ -247,12 +249,12 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
switch(Code) { | |
case C_MSGTO: | |
if (Network) { | |
- g_message("%s->%s: %s",GetPlayerName(Play),GetPlayerName(To),Data); | |
+ dopelog(3,"%s->%s: %s",GetPlayerName(Play),GetPlayerName(To),Data); | |
} | |
SendServerMessage(Play,AICode,Code,To,Data); | |
break; | |
case C_NETMESSAGE: | |
- g_message("Net:%s\n",Data); | |
+ dopelog(1,"Net:%s\n",Data); | |
/* shutdown(Play->fd,SD_RECV);*/ | |
/* Make sure they do actually disconnect, eventually! */ | |
if (ConnectTimeout) { | |
t@@ -285,7 +287,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
Play->ConnectTimeout=0; | |
if (Network) { | |
- g_message(_("%s joins the game!"),GetPlayerName(Play)); | |
+ dopelog(2,_("%s joins the game!"),GetPlayerName(Play)); | |
} | |
for (list=FirstServer;list;list=g_slist_next(list)) { | |
pt=(Player *)list->data; | |
t@@ -296,8 +298,8 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
SendEvent(Play); | |
} else { | |
/* Message displayed in the server when too many players try to connect */ | |
- g_message(_("MaxClients (%d) exceeded - dropping connection"), | |
- MaxClients); | |
+ dopelog(2,_("MaxClients (%d) exceeded - dropping connection"), | |
+ MaxClients); | |
if (MaxClients==1) { | |
text=g_strdup_printf( | |
/* Message sent to a player if the server is full */ | |
t@@ -322,7 +324,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
} else { | |
/* A player changed their name during the game (unusual, and not really | |
properly supported anyway) - notify all players of the change */ | |
- g_message(_("%s will now be known as %s"),GetPlayerName(Play),Data… | |
+ dopelog(2,_("%s will now be known as %s"),GetPlayerName(Play),Data… | |
BroadcastToClients(C_NONE,C_RENAME,Data,Play,Play); | |
SetPlayerName(Play,Data); | |
} | |
t@@ -341,6 +343,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
FinishGame(Play,_("Your dealing time is up...")); | |
} else if (i!=Play->IsAt && (NumTurns==0 || Play->Turn<NumTurns) && | |
Play->EventNum==E_NONE && Play->Health>0) { | |
+ dopelog(4,"%s jets to %s",GetPlayerName(Play),Location[i].Name); | |
Play->IsAt=(char)i; | |
Play->Turn++; | |
Play->Debt=(price_t)((float)Play->Debt*1.1); | |
t@@ -351,7 +354,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
} else { | |
/* A player has tried to jet to a new location, but we don't allow them to. | |
(e.g. they're still fighting someone, or they're supposed to be dead) */ | |
- g_warning(_("%s: DENIED jet to %s"),GetPlayerName(Play), | |
+ dopelog(3,_("%s: DENIED jet to %s"),GetPlayerName(Play), | |
Location[i].Name); | |
} | |
break; | |
t@@ -397,8 +400,8 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
break; | |
case C_SPYON: | |
if (Play->Cash >= Prices.Spy) { | |
- g_message(_("%s now spying on %s"),GetPlayerName(Play), | |
- GetPlayerName(To)); | |
+ dopelog(3,_("%s now spying on %s"),GetPlayerName(Play), | |
+ GetPlayerName(To)); | |
Play->Cash -= Prices.Spy; | |
LoseBitch(Play,NULL,NULL); | |
NewEntry.Play=Play; NewEntry.Turns=-1; | |
t@@ -411,7 +414,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
break; | |
case C_TIPOFF: | |
if (Play->Cash >= Prices.Tipoff) { | |
- g_message(_("%s tipped off the cops to %s"),GetPlayerName(Play), | |
+ dopelog(3,_("%s tipped off the cops to %s"),GetPlayerName(Play), | |
GetPlayerName(To)); | |
Play->Cash -= Prices.Tipoff; | |
LoseBitch(Play,NULL,NULL); | |
t@@ -430,7 +433,7 @@ void HandleServerMessage(gchar *buf,Player *Play) { | |
} | |
break; | |
case C_MSG: | |
- if (Network) g_message("%s: %s",GetPlayerName(Play),Data); | |
+ if (Network) dopelog(3,"%s: %s",GetPlayerName(Play),Data); | |
BroadcastToClients(C_NONE,C_MSG,Data,Play,Play); | |
break; | |
default: | |
t@@ -554,7 +557,7 @@ void CreatePidFile() { | |
if (!PidFile) return; | |
fp=fopen(PidFile,"w"); | |
if (fp) { | |
- g_message(_("Maintaining pid file %s"),PidFile); | |
+ dopelog(1,_("Maintaining pid file %s"),PidFile); | |
fprintf(fp,"%ld\n",(long)getpid()); | |
fclose(fp); | |
chmod(PidFile,S_IREAD|S_IWRITE); | |
t@@ -722,17 +725,17 @@ void HandleServerCommand(char *string) { | |
tmp=(Player *)list->data; | |
if (!IsCop(tmp)) g_print("%s\n",GetPlayerName(tmp)); | |
} | |
- } else g_message(_("No users currently logged on!")); | |
+ } else g_print(_("No users currently logged on!\n")); | |
} else if (strncasecmp(string,"push ",5)==0) { | |
tmp=GetPlayerByName(string+5,FirstServer); | |
if (tmp) { | |
- g_message(_("Pushing %s"),GetPlayerName(tmp)); | |
+ dopelog(0,_("Pushing %s"),GetPlayerName(tmp)); | |
SendServerMessage(NULL,C_NONE,C_PUSH,tmp,NULL); | |
} else g_warning(_("No such user!")); | |
} else if (strncasecmp(string,"kill ",5)==0) { | |
tmp=GetPlayerByName(string+5,FirstServer); | |
if (tmp) { | |
- g_message(_("%s killed"),GetPlayerName(tmp)); | |
+ dopelog(0,_("%s killed"),GetPlayerName(tmp)); | |
BroadcastToClients(C_NONE,C_KILL,GetPlayerName(tmp),tmp, | |
(Player *)FirstServer->data); | |
FirstServer=RemovePlayer(tmp,FirstServer); | |
t@@ -754,7 +757,7 @@ Player *HandleNewConnection() { | |
perror("accept socket"); bgetch(); exit(1); | |
} | |
fcntl(ClientSock,F_SETFL,O_NONBLOCK); | |
- g_message(_("got connection from %s"),inet_ntoa(ClientAddr.sin_addr)); | |
+ dopelog(2,_("got connection from %s"),inet_ntoa(ClientAddr.sin_addr)); | |
tmp=g_new(Player,1); | |
FirstServer=AddPlayer(ClientSock,tmp,FirstServer); | |
if (ConnectTimeout) { | |
t@@ -774,7 +777,7 @@ void RemovePlayerFromServer(Player *Play,gboolean WantQuit… | |
if (Play->InputTag) gdk_input_remove(Play->InputTag); | |
#endif | |
if (!WantQuit && strlen(GetPlayerName(Play))>0) { | |
- g_message(_("%s leaves the server!"),GetPlayerName(Play)); | |
+ dopelog(2,_("%s leaves the server!"),GetPlayerName(Play)); | |
ClientLeftServer(Play); | |
/* Blank the name, so that CountPlayers ignores this player */ | |
SetPlayerName(Play,NULL); | |
t@@ -797,13 +800,14 @@ void ServerLoop() { | |
struct timeval timeout; | |
int MinTimeout; | |
GString *LineBuf; | |
- gboolean EndOfLine,DoneOK; | |
+ gboolean EndOfLine,DoneOK,ReadingHeaders; | |
gchar *buf; | |
- InitNetworkBuffer(&MetaNetBuf,'\n'); | |
+ InitNetworkBuffer(&MetaNetBuf,'\n','\r'); | |
StartServer(); | |
+ ReadingHeaders=TRUE; | |
LineBuf=g_string_new(""); | |
while (1) { | |
FD_ZERO(&readfs); | |
t@@ -849,7 +853,7 @@ void ServerLoop() { | |
RequestServerShutdown(); | |
if (IsServerShutdown()) break; | |
} else { | |
- g_message(_("Standard input closed.")); | |
+ dopelog(0,_("Standard input closed.")); | |
InputClosed=TRUE; | |
} | |
} else if (EndOfLine) { | |
t@@ -861,14 +865,18 @@ void ServerLoop() { | |
if (FD_ISSET(ListenSock,&readfs)) { | |
HandleNewConnection(); | |
} | |
+ if (MetaNetBuf.WaitConnect) ReadingHeaders=TRUE; | |
if (RespondToSelect(&MetaNetBuf,&readfs,&writefs,&errorfs,&DoneOK)) { | |
while ((buf=GetWaitingMessage(&MetaNetBuf))) { | |
- g_print("Meta: %s\n",buf); | |
+ if (buf[0] || ReadingHeaders) { | |
+ dopelog(ReadingHeaders ? 4 : 2,"MetaServer: %s",buf); | |
+ } | |
+ if (buf[0]==0) ReadingHeaders=FALSE; | |
g_free(buf); | |
} | |
} | |
if (!DoneOK) { | |
- g_print("Meta: (closed)\n"); | |
+ dopelog(4,"MetaServer: (closed)\n"); | |
ShutdownNetworkBuffer(&MetaNetBuf); | |
if (IsServerShutdown()) break; | |
} | |
t@@ -944,10 +952,13 @@ static void GuiServerPrintFunc(const gchar *string) { | |
static void GuiServerLogMessage(const gchar *log_domain, | |
GLogLevelFlags log_level,const gchar *message, | |
gpointer user_data) { | |
- gchar *text; | |
- text = g_strdup_printf("Message: %s\n",message); | |
- GuiServerPrintFunc(text); | |
- g_free(text); | |
+ GString *text; | |
+ text=GetLogString(log_level,message); | |
+ if (text) { | |
+ g_string_append(text,"\n"); | |
+ GuiServerPrintFunc(text->str); | |
+ g_string_free(text,TRUE); | |
+ } | |
} | |
static void GuiQuitServer() { | |
t@@ -1048,7 +1059,7 @@ void GuiServerLoop() { | |
gtk_widget_show_all(window); | |
g_set_print_handler(GuiServerPrintFunc); | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING, | |
+ g_log_set_handler(NULL,LogMask()|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING, | |
GuiServerLogMessage,NULL); | |
StartServer(); | |
t@@ -1189,6 +1200,7 @@ void SendHighScores(Player *Play,char EndGame,char *Mess… | |
timep=gmtime(&tim); | |
Score.Time=g_new(char,80); /* Yuck! */ | |
strftime(Score.Time,80,"%d-%m-%Y",timep); | |
+ Score.Time[79]='\0'; | |
for (i=0;i<NUMHISCORE;i++) { | |
if (InList==-1 && (Score.Money > HiScore[i].Money || | |
!HiScore[i].Time || HiScore[i].Time[0]==0)) { | |
t@@ -1276,16 +1288,16 @@ void SendEvent(Player *To) { | |
case E_OFFOBJECT: | |
To->OnBehalfOf=NULL; | |
for (i=0;i<To->TipList.Number;i++) { | |
- g_message(_("%s: Tipoff from %s"),GetPlayerName(To), | |
- GetPlayerName(To->TipList.Data[i].Play)); | |
+ dopelog(3,_("%s: Tipoff from %s"),GetPlayerName(To), | |
+ GetPlayerName(To->TipList.Data[i].Play)); | |
To->OnBehalfOf=To->TipList.Data[i].Play; | |
SendCopOffer(To,FORCECOPS); | |
return; | |
} | |
for (i=0;i<To->SpyList.Number;i++) { | |
if (To->SpyList.Data[i].Turns<0) { | |
- g_message(_("%s: Spy offered by %s"),GetPlayerName(To), | |
- GetPlayerName(To->SpyList.Data[i].Play)); | |
+ dopelog(3,_("%s: Spy offered by %s"),GetPlayerName(To), | |
+ GetPlayerName(To->SpyList.Data[i].Play)); | |
To->OnBehalfOf=To->SpyList.Data[i].Play; | |
SendCopOffer(To,FORCEBITCH); | |
return; | |
t@@ -1820,8 +1832,8 @@ void ResolveTipoff(Player *Play) { | |
if (IsCop(Play) || !CanRunHere(Play)) return; | |
if (g_slist_find(FirstServer,(gpointer)Play->OnBehalfOf)) { | |
- g_message(_("%s: tipoff by %s finished OK."),GetPlayerName(Play), | |
- GetPlayerName(Play->OnBehalfOf)); | |
+ dopelog(4,_("%s: tipoff by %s finished OK."),GetPlayerName(Play), | |
+ GetPlayerName(Play->OnBehalfOf)); | |
RemoveListPlayer(&(Play->TipList),Play->OnBehalfOf); | |
text=g_string_new(""); | |
if (Play->Health==0) { | |
t@@ -1937,7 +1949,7 @@ int RandomOffer(Player *To) { | |
SendPlayerData(To); | |
SendPrintMessage(NULL,C_NONE,To,text->str); | |
} else if (Sanitized) { | |
- g_message(_("Sanitized away a RandomOffer")); | |
+ dopelog(3,_("Sanitized away a RandomOffer")); | |
} else if (r<50) { | |
amount=brandom(3,7); | |
ind=IsCarryingRandom(To,amount); | |
t@@ -2128,8 +2140,8 @@ void HandleAnswer(Player *From,Player *To,char *answer) { | |
} else if (answer[0]=='Y') switch (From->EventNum) { | |
case E_OFFOBJECT: | |
if (g_slist_find(FirstServer,(gpointer)From->OnBehalfOf)) { | |
- g_message(_("%s: offer was on behalf of %s"),GetPlayerName(From), | |
- GetPlayerName(From->OnBehalfOf)); | |
+ dopelog(3,_("%s: offer was on behalf of %s"),GetPlayerName(From), | |
+ GetPlayerName(From->OnBehalfOf)); | |
if (From->Bitches.Price) { | |
text=dpg_strdup_printf(_("%s has accepted your %tde!" | |
"^Use the G key to contact your spy."), | |
t@@ -2224,8 +2236,8 @@ void HandleAnswer(Player *From,Player *To,char *answer) { | |
case E_HIREBITCH: case E_GUNSHOP: case E_BANK: case E_LOANSHARK: | |
case E_OFFOBJECT: case E_WEED: | |
if (g_slist_find(FirstServer,(gpointer)From->OnBehalfOf)) { | |
- g_message(_("%s: offer was on behalf of %s"),GetPlayerName(From), | |
- GetPlayerName(From->OnBehalfOf)); | |
+ dopelog(3,_("%s: offer was on behalf of %s"),GetPlayerName(From), | |
+ GetPlayerName(From->OnBehalfOf)); | |
if (From->Bitches.Price && From->EventNum==E_OFFOBJECT) { | |
text=dpg_strdup_printf(_("%s has rejected your %tde!"), | |
GetPlayerName(From),Names.Bitch); | |
t@@ -2431,9 +2443,13 @@ GSList *HandleTimeouts(GSList *First) { | |
timenow=time(NULL); | |
if (MetaMinTimeout<=timenow) { | |
MetaMinTimeout=0; | |
- if (MetaPlayerPending) RegisterWithMetaServer(TRUE,TRUE,FALSE); | |
+ if (MetaPlayerPending) { | |
+ dopelog(3,_("Sending pending updates to the metaserver...")); | |
+ RegisterWithMetaServer(TRUE,TRUE,FALSE); | |
+ } | |
} | |
if (MetaUpdateTimeout!=0 && MetaUpdateTimeout<=timenow) { | |
+ dopelog(3,_("Sending reminder message to the metaserver...")); | |
RegisterWithMetaServer(TRUE,FALSE,FALSE); | |
} | |
list=First; | |
t@@ -2442,7 +2458,7 @@ GSList *HandleTimeouts(GSList *First) { | |
Play=(Player *)list->data; | |
if (Play->IdleTimeout!=0 && Play->IdleTimeout<=timenow) { | |
Play->IdleTimeout=0; | |
- g_message(_("Player removed due to idle timeout")); | |
+ dopelog(1,_("Player removed due to idle timeout")); | |
SendPrintMessage(NULL,C_NONE,Play,"Disconnected due to idle timeout"); | |
ClientLeftServer(Play); | |
/* shutdown(Play->fd,SD_RECV);*/ | |
t@@ -2452,7 +2468,7 @@ GSList *HandleTimeouts(GSList *First) { | |
} | |
} else if (Play->ConnectTimeout!=0 && Play->ConnectTimeout<=timenow) { | |
Play->ConnectTimeout=0; | |
- g_message(_("Player removed due to connect timeout")); | |
+ dopelog(1,_("Player removed due to connect timeout")); | |
First=RemovePlayer(Play,First); | |
} else if (Play->FightTimeout!=0 && Play->FightTimeout<=timenow) { | |
ClearFightTimeout(Play); | |
diff --git a/src/winmain.c b/src/winmain.c | |
t@@ -42,11 +42,14 @@ | |
static void ServerLogMessage(const gchar *log_domain,GLogLevelFlags log_level, | |
const gchar *message,gpointer user_data) { | |
DWORD NumChar; | |
- gchar *text; | |
- text=g_strdup_printf("%s\n",message); | |
- WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),text,strlen(text), | |
- &NumChar,NULL); | |
- g_free(text); | |
+ GString *text; | |
+ text=GetLogString(log_level,message); | |
+ if (text) { | |
+ g_string_append(text,"\n"); | |
+ WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),text->str,strlen(text->str), | |
+ &NumChar,NULL); | |
+ g_string_free(text,TRUE); | |
+ } | |
} | |
static void ServerPrintFunc(const gchar *string) { | |
t@@ -99,7 +102,7 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevIns… | |
bindtextdomain(PACKAGE,LOCALEDIR); | |
textdomain(PACKAGE); | |
#endif | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING| | |
+ g_log_set_handler(NULL,LogMask()|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING| | |
G_LOG_LEVEL_CRITICAL,LogMessage,NULL); | |
split=g_strsplit(lpszCmdParam," ",0); | |
argc=0; | |
t@@ -129,7 +132,8 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevIn… | |
#else | |
AllocConsole(); | |
SetConsoleTitle(_("dopewars server")); | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING, | |
+ g_log_set_handler(NULL, | |
+ LogMask()|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNIN… | |
ServerLogMessage,NULL); | |
g_set_print_handler(ServerPrintFunc); | |
newterm(NULL,NULL,NULL); | |
t@@ -141,7 +145,8 @@ int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevIn… | |
/* Title of the Windows window used for AI player output */ | |
SetConsoleTitle(_("dopewars AI")); | |
- g_log_set_handler(NULL,G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNING, | |
+ g_log_set_handler(NULL, | |
+ LogMask()|G_LOG_LEVEL_MESSAGE|G_LOG_LEVEL_WARNIN… | |
ServerLogMessage,NULL); | |
g_set_print_handler(ServerPrintFunc); | |
newterm(NULL,NULL,NULL); |