mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-31 19:57:06 +01:00
gtk known-player invitation works
This commit is contained in:
parent
736c9f3503
commit
11266ece5b
5 changed files with 67 additions and 47 deletions
|
@ -187,6 +187,22 @@ kplr_getPlayers( XW_DUtilCtxt* dutil, XWEnv xwe,
|
|||
*nFound = state->nPlayers;
|
||||
}
|
||||
|
||||
XP_Bool
|
||||
kplr_getAddr( XW_DUtilCtxt* dutil, XWEnv xwe, const XP_UCHAR* name,
|
||||
CommsAddrRec* addr )
|
||||
{
|
||||
KPState* state = loadState( dutil, xwe );
|
||||
XP_Bool found = XP_FALSE;
|
||||
for ( KnownPlayer* kp = state->players; !!kp && !found; kp = kp->next ) {
|
||||
found = 0 == XP_STRCMP( kp->name, name );
|
||||
if ( found ) {
|
||||
*addr = kp->addr;
|
||||
}
|
||||
}
|
||||
LOG_RETURNF( "%s", boolToStr(found) );
|
||||
return found;
|
||||
}
|
||||
|
||||
void
|
||||
kplr_cleanup( XW_DUtilCtxt* dutil )
|
||||
{
|
||||
|
|
|
@ -33,6 +33,8 @@ XP_Bool kplr_havePlayers( XW_DUtilCtxt* dutil, XWEnv xwe );
|
|||
|
||||
void kplr_getPlayers( XW_DUtilCtxt* dutil, XWEnv xwe, const XP_UCHAR** players,
|
||||
XP_U16* nFound );
|
||||
XP_Bool kplr_getAddr( XW_DUtilCtxt* dutil, XWEnv xwe, const XP_UCHAR* name,
|
||||
CommsAddrRec* addr );
|
||||
|
||||
XP_Bool kplr_addAddrs( XW_DUtilCtxt* dutil, XWEnv xwe, const CurGameInfo* gi,
|
||||
CommsAddrRec addrs[], XP_U16 nAddrs );
|
||||
|
|
|
@ -87,7 +87,6 @@ static void gtkShowFinalScores( const GtkGameGlobals* globals,
|
|||
XP_Bool ignoreTimeout );
|
||||
static void send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
||||
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
||||
MQTTDevID* mqttInviteeID,
|
||||
const CommsAddrRec* addrs );
|
||||
|
||||
#define GTK_TRAY_HT_ROWS 3
|
||||
|
@ -679,7 +678,7 @@ on_board_window_shown( GtkWidget* XP_UNUSED(widget), GtkGameGlobals* globals )
|
|||
CommsAddrRec addr = {0};
|
||||
addrFromStream( &addr, stream );
|
||||
|
||||
send_invites( cGlobals, 1, 0, relayID, &addr.u.mqtt.devID, &addr );
|
||||
send_invites( cGlobals, 1, 0, relayID, &addr );
|
||||
}
|
||||
}
|
||||
stream_destroy( stream, NULL_XWE );
|
||||
|
@ -1405,20 +1404,18 @@ handle_invite_button( GtkWidget* XP_UNUSED(widget), GtkGameGlobals* globals )
|
|||
CommsAddrRec inviteAddr = {0};
|
||||
gint nPlayers = nMissing;
|
||||
XP_U32 relayDevID = 0;
|
||||
MQTTDevID mqttInviteeID;
|
||||
XP_Bool confirmed = gtkInviteDlg( globals, &inviteAddr, &nPlayers,
|
||||
&relayDevID, &mqttInviteeID );
|
||||
XP_LOGF( "%s: inviteDlg => %d", __func__, confirmed );
|
||||
&relayDevID );
|
||||
XP_LOGF( "%s: inviteDlg => %s", __func__, boolToStr(confirmed) );
|
||||
|
||||
if ( confirmed ) {
|
||||
send_invites( cGlobals, nPlayers, relayDevID, NULL, &mqttInviteeID, &inviteAddr );
|
||||
send_invites( cGlobals, nPlayers, relayDevID, NULL, &inviteAddr );
|
||||
}
|
||||
} /* handle_invite_button */
|
||||
|
||||
static void
|
||||
send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
||||
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
||||
MQTTDevID* mqttInviteeID,
|
||||
const CommsAddrRec* addrs )
|
||||
{
|
||||
CommsAddrRec addr = {0};
|
||||
|
@ -1468,7 +1465,7 @@ send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
|||
}
|
||||
|
||||
if ( addr_hasType( addrs, COMMS_CONN_MQTT ) ) {
|
||||
mqttc_invite( cGlobals->params, &nli, mqttInviteeID );
|
||||
mqttc_invite( cGlobals->params, &nli, &addrs->u.mqtt.devID );
|
||||
}
|
||||
|
||||
/* while ( gtkaskm( "Invite how many and how?", infos, VSIZE(infos) ) ) { */
|
||||
|
|
|
@ -39,10 +39,10 @@ static XP_UCHAR s_devIDBuf[32] = {0};
|
|||
|
||||
typedef struct _GtkInviteState {
|
||||
GtkGameGlobals* globals;
|
||||
XW_DUtilCtxt* dutil; /* hang onto as optimization */
|
||||
CommsAddrRec* addr;
|
||||
gint* nPlayersP;
|
||||
XP_U32* relayDevIDp;
|
||||
MQTTDevID* mqttDevIDp;
|
||||
gint maxPlayers;
|
||||
|
||||
GtkWidget* nPlayersCombo;
|
||||
|
@ -56,6 +56,9 @@ typedef struct _GtkInviteState {
|
|||
|
||||
GtkWidget* mqttDevID;
|
||||
|
||||
/* Known players */
|
||||
GtkWidget* knownsCombo;
|
||||
|
||||
GtkWidget* bgScanButton;
|
||||
GtkWidget* okButton;
|
||||
|
||||
|
@ -96,6 +99,11 @@ handle_ok( GtkWidget* XP_UNUSED(widget), gpointer closure )
|
|||
PageData* data = &state->pageData[curPage];
|
||||
CommsConnType conType = data->pageType;
|
||||
|
||||
if ( COMMS_CONN_NONE == conType ) {
|
||||
gchar* name =
|
||||
gtk_combo_box_text_get_active_text( GTK_COMBO_BOX_TEXT(state->knownsCombo) );
|
||||
kplr_getAddr( state->dutil, NULL_XWE, name, state->addr );
|
||||
} else {
|
||||
addr_addType( state->addr, conType );
|
||||
switch ( conType ) {
|
||||
#ifdef XWFEATURE_RELAY
|
||||
|
@ -118,9 +126,7 @@ handle_ok( GtkWidget* XP_UNUSED(widget), gpointer closure )
|
|||
break;
|
||||
case COMMS_CONN_MQTT:
|
||||
txt = gtk_entry_get_text( GTK_ENTRY(state->mqttDevID) );
|
||||
if ( strToMQTTCDevID( txt, &state->addr->u.mqtt.devID ) ) {
|
||||
*state->mqttDevIDp = state->addr->u.mqtt.devID;
|
||||
} else {
|
||||
if ( !strToMQTTCDevID( txt, &state->addr->u.mqtt.devID ) ) {
|
||||
XP_ASSERT(0);
|
||||
}
|
||||
break;
|
||||
|
@ -128,6 +134,7 @@ handle_ok( GtkWidget* XP_UNUSED(widget), gpointer closure )
|
|||
XP_ASSERT( 0 ); /* keep compiler happy */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* get the number to invite */
|
||||
gchar* num =
|
||||
|
@ -266,7 +273,7 @@ makeSMSPage( GtkInviteState* state, PageData* data )
|
|||
|
||||
|
||||
static GtkWidget*
|
||||
makeKnownsPage( GtkInviteState* XP_UNUSED(state), XW_DUtilCtxt* dutil, PageData* data )
|
||||
makeKnownsPage( GtkInviteState* state, PageData* data )
|
||||
{
|
||||
data->okButtonTxt = "Invite Known Player";
|
||||
|
||||
|
@ -275,17 +282,18 @@ makeKnownsPage( GtkInviteState* XP_UNUSED(state), XW_DUtilCtxt* dutil, PageData*
|
|||
gtk_box_pack_start( GTK_BOX(hbox), label, FALSE, TRUE, 0 );
|
||||
|
||||
XP_U16 nFound = 0;
|
||||
kplr_getPlayers( dutil, NULL_XWE, NULL, &nFound );
|
||||
kplr_getPlayers( state->dutil, NULL_XWE, NULL, &nFound );
|
||||
XP_ASSERT( nFound > 0 );
|
||||
const XP_UCHAR* names[nFound];
|
||||
kplr_getPlayers( dutil, NULL_XWE, names, &nFound );
|
||||
kplr_getPlayers( state->dutil, NULL_XWE, names, &nFound );
|
||||
|
||||
GtkWidget* combo = gtk_combo_box_text_new();
|
||||
GtkWidget* combo = state->knownsCombo = gtk_combo_box_text_new();
|
||||
for ( int ii = 0; ii < nFound; ++ii ) {
|
||||
gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(combo), names[ii] );
|
||||
}
|
||||
gtk_combo_box_set_active( GTK_COMBO_BOX(combo), 0 );
|
||||
gtk_box_pack_start( GTK_BOX(hbox), combo, FALSE, TRUE, 0 );
|
||||
state->knownsCombo = combo;
|
||||
|
||||
GtkWidget* vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0 );
|
||||
gtk_box_pack_start( GTK_BOX(vbox), hbox, FALSE, TRUE, 0 );
|
||||
|
@ -333,8 +341,7 @@ onPageChanged( GtkNotebook* XP_UNUSED(notebook), gpointer XP_UNUSED(arg1),
|
|||
|
||||
XP_Bool
|
||||
gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||
gint* nPlayersP, XP_U32* relayDevIDp,
|
||||
MQTTDevID* mqttDevIDp )
|
||||
gint* nPlayersP, XP_U32* relayDevIDp )
|
||||
{
|
||||
GtkInviteState state = {
|
||||
.globals = globals,
|
||||
|
@ -342,7 +349,7 @@ gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
|||
.nPlayersP = nPlayersP,
|
||||
.relayDevIDp = relayDevIDp,
|
||||
.maxPlayers = *nPlayersP,
|
||||
.mqttDevIDp = mqttDevIDp,
|
||||
.dutil = globals->cGlobals.params->dutil,
|
||||
};
|
||||
|
||||
GtkWidget* dialog;
|
||||
|
@ -370,11 +377,10 @@ gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
|||
|
||||
PageData* data;
|
||||
|
||||
XW_DUtilCtxt* dutil = globals->cGlobals.params->dutil;
|
||||
if ( kplr_havePlayers( dutil, NULL_XWE ) ) {
|
||||
if ( kplr_havePlayers( state.dutil, NULL_XWE ) ) {
|
||||
data = getNextData( &state, COMMS_CONN_NONE, "Knowns" );
|
||||
(void)gtk_notebook_append_page( GTK_NOTEBOOK(state.notebook),
|
||||
makeKnownsPage( &state, dutil, data ),
|
||||
makeKnownsPage( &state, data ),
|
||||
data->label );
|
||||
}
|
||||
|
||||
|
|
|
@ -24,8 +24,7 @@
|
|||
|
||||
/* return true if not cancelled */
|
||||
XP_Bool gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||
/*inout*/ gint* nPlayers, /* out */ XP_U32* relayDevID,
|
||||
MQTTDevID* mqttInviteeID );
|
||||
/*inout*/ gint* nPlayers, /* out */ XP_U32* relayDevID );
|
||||
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue