tGTK+ client now uses non-blocking code for metaserver. Relevant menus now use "..." suffix - vaccinewars - be a doctor and try to vaccinate the world (HTM) git clone git://src.adamsgaard.dk/vaccinewars (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit bce5d9d56bd8cd0ef9bdb81fac746430140d34da (DIR) parent 82bba80eb18e42f467ac48c59d6222711170cb70 (HTM) Author: Ben Webb <ben@salilab.org> Date: Sun, 9 Sep 2001 21:39:43 +0000 GTK+ client now uses non-blocking code for metaserver. Relevant menus now use "..." suffix Diffstat: M po/de.po | 48 ++++++++++++++++---------------- M po/fr.po | 46 ++++++++++++++++---------------- M po/pl.po | 48 ++++++++++++++++---------------- M po/pt_BR.po | 48 ++++++++++++++++---------------- M src/gtk_client.c | 101 ++++++++++++++++++++++--------- 5 files changed, 169 insertions(+), 122 deletions(-) --- (DIR) diff --git a/po/de.po b/po/de.po t@@ -1654,68 +1654,68 @@ msgid "/_Game" msgstr "/_Spiel" #: src/gtk_client.c:147 -msgid "/Game/_New" -msgstr "/Spiel/_Neu" +msgid "/Game/_New..." +msgstr "/Spiel/_Neu..." #: src/gtk_client.c:148 -msgid "/Game/_Quit" -msgstr "/Spiel/_Ende" +msgid "/Game/_Quit..." +msgstr "/Spiel/_Ende..." #: src/gtk_client.c:149 msgid "/_Talk" msgstr "/_Mitteilung" #: src/gtk_client.c:150 -msgid "/Talk/To _All" -msgstr "/Mitteilung/An _Alle" +msgid "/Talk/To _All..." +msgstr "/Mitteilung/An _Alle..." #: src/gtk_client.c:151 -msgid "/Talk/To _Player" -msgstr "/Mitteilung/An _Spieler" +msgid "/Talk/To _Player..." +msgstr "/Mitteilung/An _Spieler..." #: src/gtk_client.c:152 msgid "/_List" msgstr "/_Anzeigen" #: src/gtk_client.c:153 -msgid "/List/_Players" -msgstr "/Anzeigen/der _Spieler" +msgid "/List/_Players..." +msgstr "/Anzeigen/der _Spieler..." #: src/gtk_client.c:154 -msgid "/List/_Scores" -msgstr "/Anzeigen/der _Punkte" +msgid "/List/_Scores..." +msgstr "/Anzeigen/der _Punkte..." #: src/gtk_client.c:155 -msgid "/List/_Inventory" -msgstr "/Anzeigen/des _Inventars" +msgid "/List/_Inventory..." +msgstr "/Anzeigen/des _Inventars..." #: src/gtk_client.c:156 msgid "/_Errands" msgstr "/_Aktionen" #: src/gtk_client.c:157 -msgid "/Errands/_Spy" -msgstr "/Aktionen/_Spionieren" +msgid "/Errands/_Spy..." +msgstr "/Aktionen/_Spionieren..." #: src/gtk_client.c:158 -msgid "/Errands/_Tipoff" -msgstr "/Aktionen/_Verpfeifen" +msgid "/Errands/_Tipoff..." +msgstr "/Aktionen/_Verpfeifen..." #: src/gtk_client.c:159 -msgid "/Errands/Sack _Bitch" -msgstr "/Aktionen/Töte _Hure" +msgid "/Errands/Sack _Bitch..." +msgstr "/Aktionen/Töte _Hure..." #: src/gtk_client.c:160 -msgid "/Errands/_Get spy reports" -msgstr "/Aktionen/_Lese Spionagereport" +msgid "/Errands/_Get spy reports..." +msgstr "/Aktionen/_Lese Spionagereport..." #: src/gtk_client.c:161 msgid "/_Help" msgstr "/_Hilfe" #: src/gtk_client.c:162 -msgid "/Help/_About" -msgstr "/Hilfe/_Ueber" +msgid "/Help/_About..." +msgstr "/Hilfe/_Ueber..." #. Titles of the message boxes for warnings and errors #: src/gtk_client.c:174 (DIR) diff --git a/po/fr.po b/po/fr.po t@@ -1660,11 +1660,11 @@ msgid "/_Game" msgstr "/_Jeu" #: src/gtk_client.c:147 -msgid "/Game/_New" -msgstr "/Jeu/_Nouveau" +msgid "/Game/_New..." +msgstr "/Jeu/_Nouveau..." #: src/gtk_client.c:148 -msgid "/Game/_Quit" +msgid "/Game/_Quit..." msgstr "/Jeu/_Quitter" #: src/gtk_client.c:149 t@@ -1672,56 +1672,56 @@ msgid "/_Talk" msgstr "/_Parler" #: src/gtk_client.c:150 -msgid "/Talk/To _All" -msgstr "/Parler/A _Tous" +msgid "/Talk/To _All..." +msgstr "/Parler/A _Tous..." #: src/gtk_client.c:151 -msgid "/Talk/To _Player" -msgstr "/Parler/A _joueur" +msgid "/Talk/To _Player..." +msgstr "/Parler/A _joueur..." #: src/gtk_client.c:152 msgid "/_List" msgstr "/_Liste" #: src/gtk_client.c:153 -msgid "/List/_Players" -msgstr "/Liste/_Joueurs" +msgid "/List/_Players..." +msgstr "/Liste/_Joueurs..." #: src/gtk_client.c:154 -msgid "/List/_Scores" -msgstr "/Liste/_Scores" +msgid "/List/_Scores..." +msgstr "/Liste/_Scores..." #: src/gtk_client.c:155 -msgid "/List/_Inventory" -msgstr "/Liste/_Inventaire" +msgid "/List/_Inventory..." +msgstr "/Liste/_Inventaire..." #: src/gtk_client.c:156 msgid "/_Errands" msgstr "/_Taches" #: src/gtk_client.c:157 -msgid "/Errands/_Spy" -msgstr "/Taches/_Espionner" +msgid "/Errands/_Spy..." +msgstr "/Taches/_Espionner..." #: src/gtk_client.c:158 -msgid "/Errands/_Tipoff" -msgstr "/Taches/_Balancer" +msgid "/Errands/_Tipoff..." +msgstr "/Taches/_Balancer..." #: src/gtk_client.c:159 -msgid "/Errands/Sack _Bitch" -msgstr "/Taches/Balancer _Salope" +msgid "/Errands/Sack _Bitch..." +msgstr "/Taches/Balancer _Salope..." #: src/gtk_client.c:160 -msgid "/Errands/_Get spy reports" -msgstr "/Taches/_Rapports des espions" +msgid "/Errands/_Get spy reports..." +msgstr "/Taches/_Rapports des espions..." #: src/gtk_client.c:161 msgid "/_Help" msgstr "/_Aide" #: src/gtk_client.c:162 -msgid "/Help/_About" -msgstr "/Aide/_A propos" +msgid "/Help/_About..." +msgstr "/Aide/_A propos..." #. Titles of the message boxes for warnings and errors #: src/gtk_client.c:174 (DIR) diff --git a/po/pl.po b/po/pl.po t@@ -1651,68 +1651,68 @@ msgid "/_Game" msgstr "/_Gra" #: src/gtk_client.c:147 -msgid "/Game/_New" -msgstr "/Gra/_Nowa" +msgid "/Game/_New..." +msgstr "/Gra/_Nowa..." #: src/gtk_client.c:148 -msgid "/Game/_Quit" -msgstr "/Gra/_Wyjście" +msgid "/Game/_Quit..." +msgstr "/Gra/_Wyjście..." #: src/gtk_client.c:149 msgid "/_Talk" msgstr "/_Rozmowa" #: src/gtk_client.c:150 -msgid "/Talk/To _All" -msgstr "/Rozmowa/Ze _Wszystkimi" +msgid "/Talk/To _All..." +msgstr "/Rozmowa/Ze _Wszystkimi..." #: src/gtk_client.c:151 -msgid "/Talk/To _Player" -msgstr "/Rozmowa/Z _Graczem" +msgid "/Talk/To _Player..." +msgstr "/Rozmowa/Z _Graczem..." #: src/gtk_client.c:152 msgid "/_List" msgstr "/Z_obacz" #: src/gtk_client.c:153 -msgid "/List/_Players" -msgstr "/Zobacz/_Graczy" +msgid "/List/_Players..." +msgstr "/Zobacz/_Graczy..." #: src/gtk_client.c:154 -msgid "/List/_Scores" -msgstr "/Zobacz/_Wynik" +msgid "/List/_Scores..." +msgstr "/Zobacz/_Wynik..." #: src/gtk_client.c:155 -msgid "/List/_Inventory" -msgstr "/Zobacz/_Plecak" +msgid "/List/_Inventory..." +msgstr "/Zobacz/_Plecak..." #: src/gtk_client.c:156 msgid "/_Errands" msgstr "/_Zlecenia" #: src/gtk_client.c:157 -msgid "/Errands/_Spy" -msgstr "/Zlecenia/_Szpiegowanie" +msgid "/Errands/_Spy..." +msgstr "/Zlecenia/_Szpiegowanie..." #: src/gtk_client.c:158 -msgid "/Errands/_Tipoff" -msgstr "/Zlecenia/_Zasadzka" +msgid "/Errands/_Tipoff..." +msgstr "/Zlecenia/_Zasadzka..." #: src/gtk_client.c:159 -msgid "/Errands/Sack _Bitch" -msgstr "/Zlecenia/Zwolnij _dziwkę" +msgid "/Errands/Sack _Bitch..." +msgstr "/Zlecenia/Zwolnij _dziwkę..." #: src/gtk_client.c:160 -msgid "/Errands/_Get spy reports" -msgstr "/Zlecenia/_Raport szpiegowski" +msgid "/Errands/_Get spy reports..." +msgstr "/Zlecenia/_Raport szpiegowski..." #: src/gtk_client.c:161 msgid "/_Help" msgstr "/_Pomoc" #: src/gtk_client.c:162 -msgid "/Help/_About" -msgstr "/Pomoc/_O programie" +msgid "/Help/_About..." +msgstr "/Pomoc/_O programie..." #. Titles of the message boxes for warnings and errors #: src/gtk_client.c:174 (DIR) diff --git a/po/pt_BR.po b/po/pt_BR.po t@@ -1662,68 +1662,68 @@ msgid "/_Game" msgstr "/_Jogo" #: src/gtk_client.c:147 -msgid "/Game/_New" -msgstr "/Jogo/_Novo" +msgid "/Game/_New..." +msgstr "/Jogo/_Novo..." #: src/gtk_client.c:148 -msgid "/Game/_Quit" -msgstr "/Jogo/_Sair" +msgid "/Game/_Quit..." +msgstr "/Jogo/_Sair..." #: src/gtk_client.c:149 msgid "/_Talk" msgstr "/_Falar" #: src/gtk_client.c:150 -msgid "/Talk/To _All" -msgstr "/Falar/Para _Todos" +msgid "/Talk/To _All..." +msgstr "/Falar/Para _Todos..." #: src/gtk_client.c:151 -msgid "/Talk/To _Player" -msgstr "/Falar/Para um _Jogador" +msgid "/Talk/To _Player..." +msgstr "/Falar/Para um _Jogador..." #: src/gtk_client.c:152 msgid "/_List" msgstr "/_Listar" #: src/gtk_client.c:153 -msgid "/List/_Players" -msgstr "/Listar/_Jogadores" +msgid "/List/_Players..." +msgstr "/Listar/_Jogadores..." #: src/gtk_client.c:154 -msgid "/List/_Scores" -msgstr "/Listar/_Pontuaçőes" +msgid "/List/_Scores..." +msgstr "/Listar/_Pontuaçőes..." #: src/gtk_client.c:155 -msgid "/List/_Inventory" -msgstr "/Listar/_Inventório" +msgid "/List/_Inventory..." +msgstr "/Listar/_Inventório..." #: src/gtk_client.c:156 msgid "/_Errands" msgstr "/_Trabalhos" #: src/gtk_client.c:157 -msgid "/Errands/_Spy" -msgstr "/Trabalhos/_Espionar" +msgid "/Errands/_Spy..." +msgstr "/Trabalhos/_Espionar..." #: src/gtk_client.c:158 -msgid "/Errands/_Tipoff" -msgstr "/Trabalhos/_Atrair" +msgid "/Errands/_Tipoff..." +msgstr "/Trabalhos/_Atrair..." #: src/gtk_client.c:159 -msgid "/Errands/Sack _Bitch" -msgstr "/Trabalhos/Demitir _Puta" +msgid "/Errands/Sack _Bitch..." +msgstr "/Trabalhos/Demitir _Puta..." #: src/gtk_client.c:160 -msgid "/Errands/_Get spy reports" -msgstr "/Trabalhos/_Pegar informaçőes de espionagem" +msgid "/Errands/_Get spy reports..." +msgstr "/Trabalhos/_Pegar informaçőes de espionagem..." #: src/gtk_client.c:161 msgid "/_Help" msgstr "/_Ajudar" #: src/gtk_client.c:162 -msgid "/Help/_About" -msgstr "/Ajudar/_Sobre" +msgid "/Help/_About..." +msgstr "/Ajudar/_Sobre..." #. Titles of the message boxes for warnings and errors #: src/gtk_client.c:174 (DIR) diff --git a/src/gtk_client.c b/src/gtk_client.c t@@ -74,9 +74,9 @@ struct ClientDataStruct { static struct ClientDataStruct ClientData; static gboolean InGame=FALSE; -#ifdef NETWORKING +/*#ifdef NETWORKING static gboolean MetaServerRead=FALSE; -#endif +#endif*/ static GtkWidget *FightDialog=NULL,*SpyReportsDialog; static gboolean IsShowingPlayerList=FALSE,IsShowingTalkList=FALSE, t@@ -144,22 +144,22 @@ static void DisplaySpyReports(Player *Play); static GtkItemFactoryEntry menu_items[] = { /* The names of the the menus and their items in the GTK+ client */ { N_("/_Game"),NULL,NULL,0,"<Branch>" }, - { N_("/Game/_New"),"<control>N",NewGame,0,NULL }, - { N_("/Game/_Quit"),"<control>Q",QuitGame,0,NULL }, + { N_("/Game/_New..."),"<control>N",NewGame,0,NULL }, + { N_("/Game/_Quit..."),"<control>Q",QuitGame,0,NULL }, { N_("/_Talk"),NULL,NULL,0,"<Branch>" }, - { N_("/Talk/To _All"),NULL,TalkToAll,0,NULL }, - { N_("/Talk/To _Player"),NULL,TalkToPlayers,0,NULL }, + { N_("/Talk/To _All..."),NULL,TalkToAll,0,NULL }, + { N_("/Talk/To _Player..."),NULL,TalkToPlayers,0,NULL }, { N_("/_List"),NULL,NULL,0,"<Branch>" }, - { N_("/List/_Players"),NULL,ListPlayers,0,NULL }, - { N_("/List/_Scores"),NULL,ListScores,0,NULL }, - { N_("/List/_Inventory"),NULL,ListInventory,0,NULL }, + { N_("/List/_Players..."),NULL,ListPlayers,0,NULL }, + { N_("/List/_Scores..."),NULL,ListScores,0,NULL }, + { N_("/List/_Inventory..."),NULL,ListInventory,0,NULL }, { N_("/_Errands"),NULL,NULL,0,"<Branch>" }, - { N_("/Errands/_Spy"),NULL,SpyOnPlayer,0,NULL }, - { N_("/Errands/_Tipoff"),NULL,TipOff,0,NULL }, - { N_("/Errands/Sack _Bitch"),NULL,SackBitch,0,NULL }, - { N_("/Errands/_Get spy reports"),NULL,GetSpyReports,0,NULL }, + { N_("/Errands/_Spy..."),NULL,SpyOnPlayer,0,NULL }, + { N_("/Errands/_Tipoff..."),NULL,TipOff,0,NULL }, + { N_("/Errands/Sack _Bitch..."),NULL,SackBitch,0,NULL }, + { N_("/Errands/_Get spy reports..."),NULL,GetSpyReports,0,NULL }, { N_("/_Help"),NULL,NULL,0,"<LastBranch>" }, - { N_("/Help/_About"),"F1",display_intro,0,NULL } + { N_("/Help/_About..."),"F1",display_intro,0,NULL } }; static gchar *MenuTranslate(const gchar *path,gpointer func_data) { t@@ -282,6 +282,7 @@ void GetClientMessage(gpointer data,gint socket, g_warning(_("Connection to server lost - switching to " "single player mode")); SwitchToSinglePlayer(ClientData.Play); + UpdateMenus(); } } } t@@ -327,12 +328,14 @@ void HandleClientMessage(char *pt,Player *Play) { /* The server admin has asked us to leave - so warn the user, and do so */ g_warning(_("You have been pushed from the server.")); SwitchToSinglePlayer(Play); + UpdateMenus(); break; case C_QUIT: if (Network) gdk_input_remove(ClientData.GdkInputTag); /* The server has sent us notice that it is shutting down */ g_warning(_("The server has terminated.")); SwitchToSinglePlayer(Play); + UpdateMenus(); break; case C_NEWNAME: NewNameDialog(); break; t@@ -381,7 +384,7 @@ void HandleClientMessage(char *pt,Player *Play) { break; case C_ENDLIST: MenuItem=gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Spy"); + "<main>/Errands/Spy..."); /* Text to update the Errands/Spy menu item with the price for spying */ text=dpg_strdup_printf(_("_Spy\t(%P)"),Prices.Spy); t@@ -391,7 +394,7 @@ void HandleClientMessage(char *pt,Player *Play) { /* Text to update the Errands/Tipoff menu item with the price for a tipoff */ text=dpg_strdup_printf(_("_Tipoff\t(%P)"),Prices.Tipoff); MenuItem=gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Tipoff"); + "<main>/Errands/Tipoff..."); SetAccelerator(MenuItem,text,NULL,NULL,NULL); g_free(text); if (FirstClient->next) ListPlayers(NULL,NULL); t@@ -1597,17 +1600,17 @@ void UpdateMenus() { gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, "<main>/List"),InGame); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, - "<main>/List/Players"),InGame && Network); + "<main>/List/Players..."),InGame && Network); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, "<main>/Errands"),InGame); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Spy"),InGame && MultiPlayer); + "<main>/Errands/Spy..."),InGame && MultiPlayer); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Tipoff"),InGame && MultiPlayer); + "<main>/Errands/Tipoff..."),InGame && MultiPlayer); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Sack Bitch"),Bitches>0); + "<main>/Errands/Sack Bitch..."),Bitches>0); gtk_widget_set_sensitive(gtk_item_factory_get_widget(ClientData.Menu, - "<main>/Errands/Get spy reports"), + "<main>/Errands/Get spy reports..."), InGame && MultiPlayer); } t@@ -1881,7 +1884,8 @@ _("\nFor information on the command line options, type dopewars -h at your\n" struct StartGameStruct { GtkWidget *dialog,*name,*hostname,*port,*antique,*status,*metaserv; - gint ConnectTag; + gint ConnectTag,MetaTag; + HttpConnection *MetaConn; }; #ifdef NETWORKING t@@ -1976,11 +1980,47 @@ static void FillMetaServerList(struct StartGameStruct *widgets) { gtk_clist_thaw(GTK_CLIST(metaserv)); } +static void HandleMetaSock(gpointer data,gint socket, + GdkInputCondition condition) { + struct StartGameStruct *widgets; + gboolean DoneOK; + + widgets=(struct StartGameStruct *)data; + if (!widgets->MetaConn) return; + + if (NetBufHandleNetwork(&widgets->MetaConn->NetBuf,condition&GDK_INPUT_READ, + condition&GDK_INPUT_WRITE,&DoneOK)) { + while (HandleWaitingMetaServerData(widgets->MetaConn)) {} + } + if (!DoneOK) { + g_print("Metaserver communicated closed\n"); + gdk_input_remove(widgets->MetaTag); + CloseHttpConnection(widgets->MetaConn); + widgets->MetaTag=0; widgets->MetaConn=NULL; + FillMetaServerList(widgets); + } +} + static void UpdateMetaServerList(GtkWidget *widget, struct StartGameStruct *widgets) { - char *MetaError; - int HttpSock; - MetaError=OpenMetaServerConnection(&HttpSock); +/* char *MetaError; + int HttpSock;*/ + + if (widgets->MetaTag) { + gdk_input_remove(widgets->MetaTag); + CloseHttpConnection(widgets->MetaConn); + widgets->MetaTag=0; widgets->MetaConn=NULL; + } + + widgets->MetaConn = OpenMetaHttpConnection(); + + if (widgets->MetaConn) { + widgets->MetaTag = gdk_input_add(widgets->MetaConn->NetBuf.fd, + GDK_INPUT_READ|GDK_INPUT_WRITE, + HandleMetaSock,(gpointer)widgets); + } + +/* MetaError=OpenMetaServerConnection(&HttpSock); if (MetaError) { return; t@@ -1988,7 +2028,7 @@ static void UpdateMetaServerList(GtkWidget *widget, ReadMetaServerData(HttpSock); CloseMetaServerConnection(HttpSock); MetaServerRead=TRUE; - FillMetaServerList(widgets); + FillMetaServerList(widgets);*/ } static void MetaServerConnect(GtkWidget *widget, t@@ -2028,11 +2068,16 @@ static void StartSinglePlayer(GtkWidget *widget, static void CloseNewGameDia(GtkWidget *widget, struct StartGameStruct *widgets) { #ifdef NETWORKING - if (widgets->ConnectTag!=0) { + if (widgets->ConnectTag) { gdk_input_remove(widgets->ConnectTag); CloseSocket(ClientSock); widgets->ConnectTag=0; } + if (widgets->MetaTag) { + gdk_input_remove(widgets->MetaTag); + CloseHttpConnection(widgets->MetaConn); + widgets->MetaTag=0; widgets->MetaConn=NULL; + } #endif } t@@ -2056,6 +2101,8 @@ void NewGameDialog() { #endif /* NETWORKING */ widgets.ConnectTag=0; + widgets.MetaTag=0; widgets.MetaConn=NULL; + widgets.dialog=dialog=gtk_window_new(GTK_WINDOW_DIALOG); gtk_signal_connect(GTK_OBJECT(dialog),"destroy", GTK_SIGNAL_FUNC(CloseNewGameDia),