mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-07 20:46:17 +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;
|
*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
|
void
|
||||||
kplr_cleanup( XW_DUtilCtxt* dutil )
|
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,
|
void kplr_getPlayers( XW_DUtilCtxt* dutil, XWEnv xwe, const XP_UCHAR** players,
|
||||||
XP_U16* nFound );
|
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,
|
XP_Bool kplr_addAddrs( XW_DUtilCtxt* dutil, XWEnv xwe, const CurGameInfo* gi,
|
||||||
CommsAddrRec addrs[], XP_U16 nAddrs );
|
CommsAddrRec addrs[], XP_U16 nAddrs );
|
||||||
|
|
|
@ -87,7 +87,6 @@ static void gtkShowFinalScores( const GtkGameGlobals* globals,
|
||||||
XP_Bool ignoreTimeout );
|
XP_Bool ignoreTimeout );
|
||||||
static void send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
static void send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
||||||
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
||||||
MQTTDevID* mqttInviteeID,
|
|
||||||
const CommsAddrRec* addrs );
|
const CommsAddrRec* addrs );
|
||||||
|
|
||||||
#define GTK_TRAY_HT_ROWS 3
|
#define GTK_TRAY_HT_ROWS 3
|
||||||
|
@ -679,7 +678,7 @@ on_board_window_shown( GtkWidget* XP_UNUSED(widget), GtkGameGlobals* globals )
|
||||||
CommsAddrRec addr = {0};
|
CommsAddrRec addr = {0};
|
||||||
addrFromStream( &addr, stream );
|
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 );
|
stream_destroy( stream, NULL_XWE );
|
||||||
|
@ -1405,20 +1404,18 @@ handle_invite_button( GtkWidget* XP_UNUSED(widget), GtkGameGlobals* globals )
|
||||||
CommsAddrRec inviteAddr = {0};
|
CommsAddrRec inviteAddr = {0};
|
||||||
gint nPlayers = nMissing;
|
gint nPlayers = nMissing;
|
||||||
XP_U32 relayDevID = 0;
|
XP_U32 relayDevID = 0;
|
||||||
MQTTDevID mqttInviteeID;
|
|
||||||
XP_Bool confirmed = gtkInviteDlg( globals, &inviteAddr, &nPlayers,
|
XP_Bool confirmed = gtkInviteDlg( globals, &inviteAddr, &nPlayers,
|
||||||
&relayDevID, &mqttInviteeID );
|
&relayDevID );
|
||||||
XP_LOGF( "%s: inviteDlg => %d", __func__, confirmed );
|
XP_LOGF( "%s: inviteDlg => %s", __func__, boolToStr(confirmed) );
|
||||||
|
|
||||||
if ( confirmed ) {
|
if ( confirmed ) {
|
||||||
send_invites( cGlobals, nPlayers, relayDevID, NULL, &mqttInviteeID, &inviteAddr );
|
send_invites( cGlobals, nPlayers, relayDevID, NULL, &inviteAddr );
|
||||||
}
|
}
|
||||||
} /* handle_invite_button */
|
} /* handle_invite_button */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
||||||
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
XP_U32 relayDevID, const XP_UCHAR* relayID,
|
||||||
MQTTDevID* mqttInviteeID,
|
|
||||||
const CommsAddrRec* addrs )
|
const CommsAddrRec* addrs )
|
||||||
{
|
{
|
||||||
CommsAddrRec addr = {0};
|
CommsAddrRec addr = {0};
|
||||||
|
@ -1468,7 +1465,7 @@ send_invites( CommonGlobals* cGlobals, XP_U16 nPlayers,
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( addr_hasType( addrs, COMMS_CONN_MQTT ) ) {
|
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) ) ) { */
|
/* while ( gtkaskm( "Invite how many and how?", infos, VSIZE(infos) ) ) { */
|
||||||
|
|
|
@ -39,10 +39,10 @@ static XP_UCHAR s_devIDBuf[32] = {0};
|
||||||
|
|
||||||
typedef struct _GtkInviteState {
|
typedef struct _GtkInviteState {
|
||||||
GtkGameGlobals* globals;
|
GtkGameGlobals* globals;
|
||||||
|
XW_DUtilCtxt* dutil; /* hang onto as optimization */
|
||||||
CommsAddrRec* addr;
|
CommsAddrRec* addr;
|
||||||
gint* nPlayersP;
|
gint* nPlayersP;
|
||||||
XP_U32* relayDevIDp;
|
XP_U32* relayDevIDp;
|
||||||
MQTTDevID* mqttDevIDp;
|
|
||||||
gint maxPlayers;
|
gint maxPlayers;
|
||||||
|
|
||||||
GtkWidget* nPlayersCombo;
|
GtkWidget* nPlayersCombo;
|
||||||
|
@ -56,6 +56,9 @@ typedef struct _GtkInviteState {
|
||||||
|
|
||||||
GtkWidget* mqttDevID;
|
GtkWidget* mqttDevID;
|
||||||
|
|
||||||
|
/* Known players */
|
||||||
|
GtkWidget* knownsCombo;
|
||||||
|
|
||||||
GtkWidget* bgScanButton;
|
GtkWidget* bgScanButton;
|
||||||
GtkWidget* okButton;
|
GtkWidget* okButton;
|
||||||
|
|
||||||
|
@ -96,37 +99,41 @@ handle_ok( GtkWidget* XP_UNUSED(widget), gpointer closure )
|
||||||
PageData* data = &state->pageData[curPage];
|
PageData* data = &state->pageData[curPage];
|
||||||
CommsConnType conType = data->pageType;
|
CommsConnType conType = data->pageType;
|
||||||
|
|
||||||
addr_addType( state->addr, conType );
|
if ( COMMS_CONN_NONE == conType ) {
|
||||||
switch ( 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
|
#ifdef XWFEATURE_RELAY
|
||||||
case COMMS_CONN_RELAY:
|
case COMMS_CONN_RELAY:
|
||||||
txt = gtk_entry_get_text( GTK_ENTRY(state->devID) );
|
txt = gtk_entry_get_text( GTK_ENTRY(state->devID) );
|
||||||
snprintf( s_devIDBuf, sizeof(s_devIDBuf), "%s", txt );
|
snprintf( s_devIDBuf, sizeof(s_devIDBuf), "%s", txt );
|
||||||
*state->relayDevIDp = atoi( txt );
|
*state->relayDevIDp = atoi( txt );
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef XWFEATURE_BLUETOOTH
|
#ifdef XWFEATURE_BLUETOOTH
|
||||||
case COMMS_CONN_BT:
|
case COMMS_CONN_BT:
|
||||||
txt = gtk_entry_get_text( GTK_ENTRY(state->bthost) );
|
txt = gtk_entry_get_text( GTK_ENTRY(state->bthost) );
|
||||||
XP_STRNCPY( state->addr->u.bt.hostName, txt,
|
XP_STRNCPY( state->addr->u.bt.hostName, txt,
|
||||||
sizeof(state->addr->u.bt.hostName) );
|
sizeof(state->addr->u.bt.hostName) );
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case COMMS_CONN_SMS:
|
case COMMS_CONN_SMS:
|
||||||
txt = gtk_entry_get_text( GTK_ENTRY(state->smsport) );
|
txt = gtk_entry_get_text( GTK_ENTRY(state->smsport) );
|
||||||
state->addr->u.sms.port = atoi( txt );
|
state->addr->u.sms.port = atoi( txt );
|
||||||
break;
|
break;
|
||||||
case COMMS_CONN_MQTT:
|
case COMMS_CONN_MQTT:
|
||||||
txt = gtk_entry_get_text( GTK_ENTRY(state->mqttDevID) );
|
txt = gtk_entry_get_text( GTK_ENTRY(state->mqttDevID) );
|
||||||
if ( strToMQTTCDevID( txt, &state->addr->u.mqtt.devID ) ) {
|
if ( !strToMQTTCDevID( txt, &state->addr->u.mqtt.devID ) ) {
|
||||||
*state->mqttDevIDp = state->addr->u.mqtt.devID;
|
XP_ASSERT(0);
|
||||||
} else {
|
}
|
||||||
XP_ASSERT(0);
|
break;
|
||||||
|
default:
|
||||||
|
XP_ASSERT( 0 ); /* keep compiler happy */
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
XP_ASSERT( 0 ); /* keep compiler happy */
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the number to invite */
|
/* get the number to invite */
|
||||||
|
@ -266,7 +273,7 @@ makeSMSPage( GtkInviteState* state, PageData* data )
|
||||||
|
|
||||||
|
|
||||||
static GtkWidget*
|
static GtkWidget*
|
||||||
makeKnownsPage( GtkInviteState* XP_UNUSED(state), XW_DUtilCtxt* dutil, PageData* data )
|
makeKnownsPage( GtkInviteState* state, PageData* data )
|
||||||
{
|
{
|
||||||
data->okButtonTxt = "Invite Known Player";
|
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 );
|
gtk_box_pack_start( GTK_BOX(hbox), label, FALSE, TRUE, 0 );
|
||||||
|
|
||||||
XP_U16 nFound = 0;
|
XP_U16 nFound = 0;
|
||||||
kplr_getPlayers( dutil, NULL_XWE, NULL, &nFound );
|
kplr_getPlayers( state->dutil, NULL_XWE, NULL, &nFound );
|
||||||
XP_ASSERT( nFound > 0 );
|
XP_ASSERT( nFound > 0 );
|
||||||
const XP_UCHAR* names[nFound];
|
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 ) {
|
for ( int ii = 0; ii < nFound; ++ii ) {
|
||||||
gtk_combo_box_text_append_text( GTK_COMBO_BOX_TEXT(combo), names[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_combo_box_set_active( GTK_COMBO_BOX(combo), 0 );
|
||||||
gtk_box_pack_start( GTK_BOX(hbox), combo, FALSE, TRUE, 0 );
|
gtk_box_pack_start( GTK_BOX(hbox), combo, FALSE, TRUE, 0 );
|
||||||
|
state->knownsCombo = combo;
|
||||||
|
|
||||||
GtkWidget* vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0 );
|
GtkWidget* vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0 );
|
||||||
gtk_box_pack_start( GTK_BOX(vbox), hbox, FALSE, TRUE, 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
|
XP_Bool
|
||||||
gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||||
gint* nPlayersP, XP_U32* relayDevIDp,
|
gint* nPlayersP, XP_U32* relayDevIDp )
|
||||||
MQTTDevID* mqttDevIDp )
|
|
||||||
{
|
{
|
||||||
GtkInviteState state = {
|
GtkInviteState state = {
|
||||||
.globals = globals,
|
.globals = globals,
|
||||||
|
@ -342,7 +349,7 @@ gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||||
.nPlayersP = nPlayersP,
|
.nPlayersP = nPlayersP,
|
||||||
.relayDevIDp = relayDevIDp,
|
.relayDevIDp = relayDevIDp,
|
||||||
.maxPlayers = *nPlayersP,
|
.maxPlayers = *nPlayersP,
|
||||||
.mqttDevIDp = mqttDevIDp,
|
.dutil = globals->cGlobals.params->dutil,
|
||||||
};
|
};
|
||||||
|
|
||||||
GtkWidget* dialog;
|
GtkWidget* dialog;
|
||||||
|
@ -370,11 +377,10 @@ gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||||
|
|
||||||
PageData* data;
|
PageData* data;
|
||||||
|
|
||||||
XW_DUtilCtxt* dutil = globals->cGlobals.params->dutil;
|
if ( kplr_havePlayers( state.dutil, NULL_XWE ) ) {
|
||||||
if ( kplr_havePlayers( dutil, NULL_XWE ) ) {
|
|
||||||
data = getNextData( &state, COMMS_CONN_NONE, "Knowns" );
|
data = getNextData( &state, COMMS_CONN_NONE, "Knowns" );
|
||||||
(void)gtk_notebook_append_page( GTK_NOTEBOOK(state.notebook),
|
(void)gtk_notebook_append_page( GTK_NOTEBOOK(state.notebook),
|
||||||
makeKnownsPage( &state, dutil, data ),
|
makeKnownsPage( &state, data ),
|
||||||
data->label );
|
data->label );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,7 @@
|
||||||
|
|
||||||
/* return true if not cancelled */
|
/* return true if not cancelled */
|
||||||
XP_Bool gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
XP_Bool gtkInviteDlg( GtkGameGlobals* globals, CommsAddrRec* addr,
|
||||||
/*inout*/ gint* nPlayers, /* out */ XP_U32* relayDevID,
|
/*inout*/ gint* nPlayers, /* out */ XP_U32* relayDevID );
|
||||||
MQTTDevID* mqttInviteeID );
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue