gtk known-player invitation works

This commit is contained in:
Eric House 2020-09-21 13:41:01 -07:00
parent 736c9f3503
commit 11266ece5b
5 changed files with 67 additions and 47 deletions

View file

@ -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 )
{

View file

@ -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 );

View file

@ -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) ) ) { */

View file

@ -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 );
}

View file

@ -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