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),