mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-02-01 19:57:11 +01:00
finish chat fix to not crash when old messages come in
This commit is contained in:
parent
d446d3d463
commit
fbad300e48
6 changed files with 21 additions and 25 deletions
|
@ -847,8 +847,9 @@ deleteLocalRefs( JNIEnv* env, ... )
|
|||
jobject jnext = va_arg( ap, jobject );
|
||||
if ( DELETE_NO_REF == jnext ) {
|
||||
break;
|
||||
} else if ( !!jnext ) {
|
||||
deleteLocalRef( env, jnext );
|
||||
}
|
||||
deleteLocalRef( env, jnext );
|
||||
}
|
||||
va_end( ap );
|
||||
}
|
||||
|
|
|
@ -575,17 +575,14 @@ and_util_notifyIllegalWords( XW_UtilCtxt* uc, XWEnv xwe, BadWordInfo* bwi,
|
|||
|
||||
#ifdef XWFEATURE_CHAT
|
||||
static void
|
||||
and_util_showChat( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* msg, XP_S16 from, XP_U32 timestamp )
|
||||
and_util_showChat( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* msg,
|
||||
const XP_UCHAR* from, XP_U32 timestamp )
|
||||
{
|
||||
UTIL_CBK_HEADER( "showChat", "(Ljava/lang/String;ILjava/lang/String;I)V" );
|
||||
jstring jname = NULL;
|
||||
if ( 0 <= from ) {
|
||||
LocalPlayer* lp = &uc->gameInfo->players[from];
|
||||
XP_ASSERT( !lp->isLocal );
|
||||
jname = (*env)->NewStringUTF( env, lp->name );
|
||||
}
|
||||
|
||||
jstring jname = !!from ? (*env)->NewStringUTF( env, from ) : NULL;
|
||||
jstring jmsg = (*env)->NewStringUTF( env, msg );
|
||||
|
||||
(*env)->CallVoidMethod( env, util->jutil, mid, jmsg, from, jname, timestamp );
|
||||
deleteLocalRefs( env, jmsg, jname, DELETE_NO_REF );
|
||||
UTIL_CBK_TAIL();
|
||||
|
|
|
@ -1106,7 +1106,9 @@ receiveChat( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* incoming )
|
|||
XP_S16 from = -1;
|
||||
if ( 1 <= stream_getSize( incoming ) ) {
|
||||
from = stream_getU8( incoming );
|
||||
XP_ASSERT( !server->vol.gi->players[from].isLocal );
|
||||
if ( server->vol.gi->players[from].isLocal ) {
|
||||
from = -1;
|
||||
}
|
||||
}
|
||||
|
||||
XP_U32 timestamp = sizeof(timestamp) <= stream_getSize( incoming )
|
||||
|
@ -1116,7 +1118,11 @@ receiveChat( ServerCtxt* server, XWEnv xwe, XWStreamCtxt* incoming )
|
|||
sendChatToClientsExcept( server, xwe, sourceClientIndex, msg, from,
|
||||
timestamp );
|
||||
}
|
||||
util_showChat( server->vol.util, xwe, msg, from, timestamp );
|
||||
const XP_UCHAR* sender = NULL;
|
||||
if ( 0 <= from ) {
|
||||
sender = server->vol.gi->players[from].name;
|
||||
}
|
||||
util_showChat( server->vol.util, xwe, msg, sender, timestamp );
|
||||
XP_FREE( server->mpool, msg );
|
||||
return XP_TRUE;
|
||||
}
|
||||
|
|
|
@ -186,7 +186,7 @@ typedef struct UtilVtable {
|
|||
|
||||
#ifdef XWFEATURE_CHAT
|
||||
void (*m_util_showChat)( XW_UtilCtxt* uc, XWEnv xwe, const XP_UCHAR* const msg,
|
||||
XP_S16 from, XP_U32 timestamp );
|
||||
const XP_UCHAR* from, XP_U32 timestamp );
|
||||
#endif
|
||||
|
||||
#ifdef SHOW_PROGRESS
|
||||
|
|
|
@ -1251,17 +1251,13 @@ curses_util_informWordsBlocked( XW_UtilCtxt* XP_UNUSED(uc), XWEnv XP_UNUSED(xwe)
|
|||
static void
|
||||
curses_util_showChat( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe),
|
||||
const XP_UCHAR* const XP_UNUSED_DBG(msg),
|
||||
XP_S16 XP_UNUSED_DBG(from), XP_U32 XP_UNUSED(timestamp) )
|
||||
const XP_UCHAR* const XP_UNUSED_DBG(from),
|
||||
XP_U32 XP_UNUSED(timestamp) )
|
||||
{
|
||||
CursesBoardGlobals* globals = (CursesBoardGlobals*)uc->closure;
|
||||
globals->nChatsSent = 0;
|
||||
# ifdef DEBUG
|
||||
const XP_UCHAR* name = "<unknown>";
|
||||
if ( 0 <= from ) {
|
||||
CommonGlobals* cGlobals = &globals->cGlobals;
|
||||
name = cGlobals->gi->players[from].name;
|
||||
}
|
||||
XP_LOGFF( "got \"%s\" from %s", msg, name );
|
||||
XP_LOGFF( "got \"%s\" from %s", msg, from );
|
||||
# endif
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1944,19 +1944,15 @@ gtk_util_getMQTTIDsFor( XW_UtilCtxt* uc, XWEnv xwe, XP_U16 nRelayIDs,
|
|||
#ifdef XWFEATURE_CHAT
|
||||
static void
|
||||
gtk_util_showChat( XW_UtilCtxt* uc, XWEnv XP_UNUSED(xwe),
|
||||
const XP_UCHAR* const msg, XP_S16 from,
|
||||
XP_U32 tsSecs )
|
||||
const XP_UCHAR* const msg,
|
||||
const XP_UCHAR* const from, XP_U32 tsSecs )
|
||||
{
|
||||
GtkGameGlobals* globals = (GtkGameGlobals*)uc->closure;
|
||||
XP_UCHAR buf[1024];
|
||||
XP_UCHAR* name = "<unknown>";
|
||||
if ( 0 <= from ) {
|
||||
name = globals->cGlobals.gi->players[from].name;
|
||||
}
|
||||
|
||||
GDateTime* dt = g_date_time_new_from_unix_utc( tsSecs );
|
||||
gchar* tsStr = g_date_time_format( dt, "%T" );
|
||||
XP_SNPRINTF( buf, VSIZE(buf), "Quoth %s at %s: \"%s\"", name, tsStr, msg );
|
||||
XP_SNPRINTF( buf, VSIZE(buf), "Quoth %s at %s: \"%s\"", from, tsStr, msg );
|
||||
g_free( tsStr );
|
||||
g_date_time_unref (dt);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue