mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-18 22:26:30 +01:00
wire in enough comms that java's send proc gets called when device is
a guest. Networking's next....
This commit is contained in:
parent
b915319178
commit
7b0f100f27
6 changed files with 83 additions and 20 deletions
|
@ -27,6 +27,7 @@ local_SRC_FILES += \
|
||||||
xwjni.c \
|
xwjni.c \
|
||||||
utilwrapper.c \
|
utilwrapper.c \
|
||||||
drawwrapper.c \
|
drawwrapper.c \
|
||||||
|
xportwrapper.c \
|
||||||
anddict.c \
|
anddict.c \
|
||||||
andutils.c \
|
andutils.c \
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ typedef struct _AndGlobals {
|
||||||
CurGameInfo* gi;
|
CurGameInfo* gi;
|
||||||
DrawCtx* dctx;
|
DrawCtx* dctx;
|
||||||
XW_UtilCtxt* util;
|
XW_UtilCtxt* util;
|
||||||
|
TransportProcs* xportProcs;
|
||||||
} AndGlobals;
|
} AndGlobals;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* -*-mode: C; compile-command: "cd XWords4; ../scripts/ndkbuild.sh"; -*- */
|
/* -*-mode: C; compile-command: "../../scripts/ndkbuild.sh"; -*- */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
|
|
||||||
#include "utilwrapper.h"
|
#include "utilwrapper.h"
|
||||||
#include "drawwrapper.h"
|
#include "drawwrapper.h"
|
||||||
|
#include "xportwrapper.h"
|
||||||
#include "anddict.h"
|
#include "anddict.h"
|
||||||
#include "andutils.h"
|
#include "andutils.h"
|
||||||
|
|
||||||
|
@ -196,10 +197,10 @@ loadCommonPrefs( JNIEnv* env, CommonPrefs* cp, jobject j_cp )
|
||||||
}
|
}
|
||||||
|
|
||||||
static XWStreamCtxt*
|
static XWStreamCtxt*
|
||||||
and_empty_stream( MPFORMAL AndGlobals* globals )
|
and_empty_stream( MPFORMAL AndGlobals* globals, void* closure )
|
||||||
{
|
{
|
||||||
XWStreamCtxt* stream = mem_stream_make( MPPARM(mpool) globals->vtMgr,
|
XWStreamCtxt* stream = mem_stream_make( MPPARM(mpool) globals->vtMgr,
|
||||||
NULL, 0, NULL );
|
closure, 0, NULL );
|
||||||
return stream;
|
return stream;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -328,12 +329,13 @@ Java_org_eehouse_android_xw4_jni_XwJNI_game_1makeNewGame
|
||||||
globals->util = util;
|
globals->util = util;
|
||||||
DrawCtx* dctx = makeDraw( MPPARM(mpool) &state->env, j_draw );
|
DrawCtx* dctx = makeDraw( MPPARM(mpool) &state->env, j_draw );
|
||||||
globals->dctx = dctx;
|
globals->dctx = dctx;
|
||||||
|
globals->xportProcs = makeXportProcs( MPPARM(mpool) &state->env, j_procs );
|
||||||
CommonPrefs cp;
|
CommonPrefs cp;
|
||||||
(void)loadCommonPrefs( env, &cp, j_cp );
|
(void)loadCommonPrefs( env, &cp, j_cp );
|
||||||
|
|
||||||
XP_LOGF( "calling game_makeNewGame" );
|
XP_LOGF( "calling game_makeNewGame" );
|
||||||
game_makeNewGame( MPPARM(mpool) &state->game, gi, util, dctx, gameID,
|
game_makeNewGame( MPPARM(mpool) &state->game, gi, util, dctx, gameID,
|
||||||
&cp, NULL );
|
&cp, globals->xportProcs );
|
||||||
|
|
||||||
DictionaryCtxt* dict = makeDict( MPPARM(mpool) env, util, jDictBytes );
|
DictionaryCtxt* dict = makeDict( MPPARM(mpool) env, util, jDictBytes );
|
||||||
#ifdef STUBBED_DICT
|
#ifdef STUBBED_DICT
|
||||||
|
@ -364,6 +366,7 @@ JNIEXPORT void JNICALL Java_org_eehouse_android_xw4_jni_XwJNI_game_1dispose
|
||||||
game_dispose( &state->game );
|
game_dispose( &state->game );
|
||||||
|
|
||||||
destroyDraw( globals->dctx );
|
destroyDraw( globals->dctx );
|
||||||
|
destroyXportProcs( globals->xportProcs );
|
||||||
destroyUtil( globals->util );
|
destroyUtil( globals->util );
|
||||||
vtmgr_destroy( MPPARM(mpool) globals->vtMgr );
|
vtmgr_destroy( MPPARM(mpool) globals->vtMgr );
|
||||||
|
|
||||||
|
@ -386,6 +389,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_game_1makeFromStream
|
||||||
globals->util = makeUtil( MPPARM(mpool) &state->env, jutil, globals->gi, globals );
|
globals->util = makeUtil( MPPARM(mpool) &state->env, jutil, globals->gi, globals );
|
||||||
DictionaryCtxt* dict = makeDict( MPPARM(mpool) env, globals->util, jdict );
|
DictionaryCtxt* dict = makeDict( MPPARM(mpool) env, globals->util, jdict );
|
||||||
globals->dctx = makeDraw( MPPARM(mpool) &state->env, jdraw );
|
globals->dctx = makeDraw( MPPARM(mpool) &state->env, jdraw );
|
||||||
|
globals->xportProcs = makeXportProcs( MPPARM(mpool) &state->env, jprocs );
|
||||||
|
|
||||||
jbyte* jelems = (*env)->GetByteArrayElements( env, jstream, NULL );
|
jbyte* jelems = (*env)->GetByteArrayElements( env, jstream, NULL );
|
||||||
XWStreamCtxt* stream = mem_stream_make( MPPARM(mpool) globals->vtMgr,
|
XWStreamCtxt* stream = mem_stream_make( MPPARM(mpool) globals->vtMgr,
|
||||||
|
@ -399,13 +403,14 @@ Java_org_eehouse_android_xw4_jni_XwJNI_game_1makeFromStream
|
||||||
result = game_makeFromStream( MPPARM(mpool) stream, &state->game,
|
result = game_makeFromStream( MPPARM(mpool) stream, &state->game,
|
||||||
globals->gi, dict,
|
globals->gi, dict,
|
||||||
globals->util, globals->dctx, &cp,
|
globals->util, globals->dctx, &cp,
|
||||||
NULL );
|
globals->xportProcs );
|
||||||
stream_destroy( stream );
|
stream_destroy( stream );
|
||||||
|
|
||||||
if ( result ) {
|
if ( result ) {
|
||||||
setJGI( env, jgi, globals->gi );
|
setJGI( env, jgi, globals->gi );
|
||||||
} else {
|
} else {
|
||||||
destroyDraw( globals->dctx );
|
destroyDraw( globals->dctx );
|
||||||
|
destroyXportProcs( globals->xportProcs );
|
||||||
dict_destroy( dict );
|
dict_destroy( dict );
|
||||||
destroyUtil( globals->util );
|
destroyUtil( globals->util );
|
||||||
destroyGI( MPPARM(mpool) globals->gi );
|
destroyGI( MPPARM(mpool) globals->gi );
|
||||||
|
@ -717,7 +722,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_server_1formatDictCounts
|
||||||
{
|
{
|
||||||
jstring result;
|
jstring result;
|
||||||
XWJNI_START();
|
XWJNI_START();
|
||||||
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals );
|
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals, state );
|
||||||
server_formatDictCounts( state->game.server, stream, nCols );
|
server_formatDictCounts( state->game.server, stream, nCols );
|
||||||
result = streamToJString( MPPARM(mpool) env, stream );
|
result = streamToJString( MPPARM(mpool) env, stream );
|
||||||
stream_destroy( stream );
|
stream_destroy( stream );
|
||||||
|
@ -743,7 +748,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_model_1writeGameHistory
|
||||||
{
|
{
|
||||||
jstring result;
|
jstring result;
|
||||||
XWJNI_START();
|
XWJNI_START();
|
||||||
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals );
|
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals, state );
|
||||||
model_writeGameHistory( state->game.model, stream, state->game.server,
|
model_writeGameHistory( state->game.model, stream, state->game.server,
|
||||||
gameOver );
|
gameOver );
|
||||||
result = streamToJString( MPPARM(mpool) env, stream );
|
result = streamToJString( MPPARM(mpool) env, stream );
|
||||||
|
@ -759,7 +764,7 @@ Java_org_eehouse_android_xw4_jni_XwJNI_server_1writeFinalScores
|
||||||
{
|
{
|
||||||
jstring result;
|
jstring result;
|
||||||
XWJNI_START();
|
XWJNI_START();
|
||||||
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals );
|
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals, state );
|
||||||
server_writeFinalScores( state->game.server, stream );
|
server_writeFinalScores( state->game.server, stream );
|
||||||
result = streamToJString( MPPARM(mpool) env, stream );
|
result = streamToJString( MPPARM(mpool) env, stream );
|
||||||
(*env)->DeleteLocalRef( env, result );
|
(*env)->DeleteLocalRef( env, result );
|
||||||
|
@ -767,3 +772,37 @@ Java_org_eehouse_android_xw4_jni_XwJNI_server_1writeFinalScores
|
||||||
XWJNI_END();
|
XWJNI_END();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
and_send_on_close( XWStreamCtxt* stream, void* closure )
|
||||||
|
{
|
||||||
|
JNIState* state = (JNIState*)closure;
|
||||||
|
|
||||||
|
XP_ASSERT( !!state->game.comms );
|
||||||
|
comms_send( state->game.comms, stream );
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_org_eehouse_android_xw4_jni_XwJNI_server_1initClientConnection
|
||||||
|
( JNIEnv* env, jclass C, jint gamePtr )
|
||||||
|
{
|
||||||
|
LOG_FUNC();
|
||||||
|
XWJNI_START();
|
||||||
|
XWStreamCtxt* stream = and_empty_stream( MPPARM(mpool) globals, state );
|
||||||
|
stream_setOnCloseProc( stream, and_send_on_close );
|
||||||
|
server_initClientConnection( state->game.server, stream );
|
||||||
|
XWJNI_END();
|
||||||
|
LOG_RETURN_VOID();
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_org_eehouse_android_xw4_jni_XwJNI_comms_1start
|
||||||
|
( JNIEnv* env, jclass C, jint gamePtr )
|
||||||
|
{
|
||||||
|
XWJNI_START();
|
||||||
|
if ( !!state->game.comms ) {
|
||||||
|
comms_start( state->game.comms );
|
||||||
|
}
|
||||||
|
XWJNI_END();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,14 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
|
||||||
|
import org.eehouse.android.xw4.jni.CurGameInfo.DeviceRole;
|
||||||
|
|
||||||
public class JNIThread extends Thread {
|
public class JNIThread extends Thread {
|
||||||
|
|
||||||
public enum JNICmd { CMD_NONE,
|
public enum JNICmd { CMD_NONE,
|
||||||
CMD_DRAW,
|
CMD_DRAW,
|
||||||
CMD_LAYOUT,
|
CMD_LAYOUT,
|
||||||
|
CMD_START,
|
||||||
CMD_DO,
|
CMD_DO,
|
||||||
CMD_PEN_DOWN,
|
CMD_PEN_DOWN,
|
||||||
CMD_PEN_MOVE,
|
CMD_PEN_MOVE,
|
||||||
|
@ -42,6 +45,7 @@ public class JNIThread extends Thread {
|
||||||
|
|
||||||
private boolean m_stopped = false;
|
private boolean m_stopped = false;
|
||||||
private int m_jniGamePtr;
|
private int m_jniGamePtr;
|
||||||
|
private CurGameInfo m_gi;
|
||||||
private Handler m_handler;
|
private Handler m_handler;
|
||||||
LinkedBlockingQueue<QueueElem> m_queue;
|
LinkedBlockingQueue<QueueElem> m_queue;
|
||||||
|
|
||||||
|
@ -54,9 +58,10 @@ public class JNIThread extends Thread {
|
||||||
Object[] m_args;
|
Object[] m_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JNIThread( int gamePtr, Handler handler ) {
|
public JNIThread( int gamePtr, CurGameInfo gi, Handler handler ) {
|
||||||
Utils.logf( "in JNIThread()" );
|
Utils.logf( "in JNIThread()" );
|
||||||
m_jniGamePtr = gamePtr;
|
m_jniGamePtr = gamePtr;
|
||||||
|
m_gi = gi;
|
||||||
m_handler = handler;
|
m_handler = handler;
|
||||||
|
|
||||||
m_queue = new LinkedBlockingQueue<QueueElem>();
|
m_queue = new LinkedBlockingQueue<QueueElem>();
|
||||||
|
@ -135,7 +140,6 @@ public class JNIThread extends Thread {
|
||||||
XwJNI.board_invalAll( m_jniGamePtr );
|
XwJNI.board_invalAll( m_jniGamePtr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
boolean[] barr = new boolean[1]; // scratch boolean
|
boolean[] barr = new boolean[1]; // scratch boolean
|
||||||
|
@ -163,6 +167,14 @@ public class JNIThread extends Thread {
|
||||||
draw = true;
|
draw = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CMD_START:
|
||||||
|
XwJNI.comms_start( m_jniGamePtr );
|
||||||
|
if ( m_gi.serverRole == DeviceRole.SERVER_ISCLIENT ) {
|
||||||
|
XwJNI.server_initClientConnection( m_jniGamePtr );
|
||||||
|
}
|
||||||
|
/* FALLTHRU; works in java? */
|
||||||
|
draw = XwJNI.server_do( m_jniGamePtr );
|
||||||
|
break;
|
||||||
case CMD_DO:
|
case CMD_DO:
|
||||||
draw = XwJNI.server_do( m_jniGamePtr );
|
draw = XwJNI.server_do( m_jniGamePtr );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
package org.eehouse.android.xw4.jni;
|
package org.eehouse.android.xw4.jni;
|
||||||
|
|
||||||
public interface TransportProcs {
|
public interface TransportProcs {
|
||||||
int transportSend( byte[] buf, int len, final CommsAddrRec addr );
|
int transportSend( byte[] buf, final CommsAddrRec addr );
|
||||||
|
|
||||||
public static final int COMMS_RELAYSTATE_UNCONNECTED = 0;
|
public static final int COMMS_RELAYSTATE_UNCONNECTED = 0;
|
||||||
public static final int COMMS_RELAYSTATE_DENIED = 1;
|
public static final int COMMS_RELAYSTATE_DENIED = 1;
|
||||||
|
|
|
@ -45,7 +45,6 @@ public class XwJNI {
|
||||||
public static native void game_dispose( int gamePtr );
|
public static native void game_dispose( int gamePtr );
|
||||||
|
|
||||||
// Board methods
|
// Board methods
|
||||||
|
|
||||||
public static native void board_invalAll( int gamePtr );
|
public static native void board_invalAll( int gamePtr );
|
||||||
public static native boolean board_draw( int gamePtr );
|
public static native boolean board_draw( int gamePtr );
|
||||||
public static native void board_setPos( int gamePtr, int left, int top,
|
public static native void board_setPos( int gamePtr, int left, int top,
|
||||||
|
@ -58,10 +57,13 @@ public class XwJNI {
|
||||||
public static native void board_setTrayLoc( int gamePtr, int left,
|
public static native void board_setTrayLoc( int gamePtr, int left,
|
||||||
int top, int width,
|
int top, int width,
|
||||||
int height, int minDividerWidth );
|
int height, int minDividerWidth );
|
||||||
public static native boolean board_handlePenDown( int gamePtr, int xx, int yy,
|
public static native boolean board_handlePenDown( int gamePtr,
|
||||||
|
int xx, int yy,
|
||||||
boolean[] handled );
|
boolean[] handled );
|
||||||
public static native boolean board_handlePenMove( int gamePtr, int xx, int yy );
|
public static native boolean board_handlePenMove( int gamePtr,
|
||||||
public static native boolean board_handlePenUp( int gamePtr, int xx, int yy );
|
int xx, int yy );
|
||||||
|
public static native boolean board_handlePenUp( int gamePtr,
|
||||||
|
int xx, int yy );
|
||||||
|
|
||||||
public static native boolean board_juggleTray( int gamePtr );
|
public static native boolean board_juggleTray( int gamePtr );
|
||||||
public static native int board_getTrayVisState( int gamePtr );
|
public static native int board_getTrayVisState( int gamePtr );
|
||||||
|
@ -72,18 +74,26 @@ public class XwJNI {
|
||||||
public static native boolean board_flip( int gamePtr );
|
public static native boolean board_flip( int gamePtr );
|
||||||
public static native boolean board_replaceTiles( int gamePtr );
|
public static native boolean board_replaceTiles( int gamePtr );
|
||||||
public static native void board_resetEngine( int gamePtr );
|
public static native void board_resetEngine( int gamePtr );
|
||||||
public static native boolean board_requestHint( int gamePtr, boolean useTileLimits,
|
public static native boolean board_requestHint( int gamePtr,
|
||||||
|
boolean useTileLimits,
|
||||||
boolean[] workRemains );
|
boolean[] workRemains );
|
||||||
public static native boolean board_beginTrade( int gamePtr );
|
public static native boolean board_beginTrade( int gamePtr );
|
||||||
|
|
||||||
public static native String board_formatRemainingTiles( int gamePtr );
|
public static native String board_formatRemainingTiles( int gamePtr );
|
||||||
|
|
||||||
|
// Model
|
||||||
|
public static native String model_writeGameHistory( int gamePtr,
|
||||||
|
boolean gameOver );
|
||||||
|
|
||||||
|
// Server
|
||||||
public static native void server_handleUndo( int gamePtr );
|
public static native void server_handleUndo( int gamePtr );
|
||||||
public static native boolean server_do( int gamePtr );
|
public static native boolean server_do( int gamePtr );
|
||||||
public static native String server_formatDictCounts( int gamePtr, int nCols );
|
public static native String server_formatDictCounts( int gamePtr, int nCols );
|
||||||
public static native boolean server_getGameIsOver( int gamePtr );
|
public static native boolean server_getGameIsOver( int gamePtr );
|
||||||
|
|
||||||
public static native String model_writeGameHistory( int gamePtr, boolean gameOver );
|
|
||||||
|
|
||||||
public static native String server_writeFinalScores( int gamePtr );
|
public static native String server_writeFinalScores( int gamePtr );
|
||||||
|
public static native void server_initClientConnection( int gamePtr );
|
||||||
|
|
||||||
|
// Comms
|
||||||
|
public static native void comms_start( int gamePtr );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue