project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/GameConnection.java
changeset 7588 27e5857da6af
parent 7584 7831c84cc644
child 10017 de822cd3df3a
equal deleted inserted replaced
7586:33924ff4af50 7588:27e5857da6af
    22 import java.net.ConnectException;
    22 import java.net.ConnectException;
    23 
    23 
    24 import org.hedgewars.hedgeroid.Datastructures.GameConfig;
    24 import org.hedgewars.hedgeroid.Datastructures.GameConfig;
    25 import org.hedgewars.hedgeroid.frontlib.Flib;
    25 import org.hedgewars.hedgeroid.frontlib.Flib;
    26 import org.hedgewars.hedgeroid.frontlib.Frontlib;
    26 import org.hedgewars.hedgeroid.frontlib.Frontlib;
       
    27 import org.hedgewars.hedgeroid.frontlib.Frontlib.ByteArrayPtr;
    27 import org.hedgewars.hedgeroid.frontlib.Frontlib.BytesCallback;
    28 import org.hedgewars.hedgeroid.frontlib.Frontlib.BytesCallback;
    28 import org.hedgewars.hedgeroid.frontlib.Frontlib.GameSetupPtr;
    29 import org.hedgewars.hedgeroid.frontlib.Frontlib.GameSetupPtr;
    29 import org.hedgewars.hedgeroid.frontlib.Frontlib.GameconnPtr;
    30 import org.hedgewars.hedgeroid.frontlib.Frontlib.GameconnPtr;
    30 import org.hedgewars.hedgeroid.frontlib.Frontlib.IntCallback;
    31 import org.hedgewars.hedgeroid.frontlib.Frontlib.IntCallback;
    31 import org.hedgewars.hedgeroid.frontlib.Frontlib.StrBoolCallback;
    32 import org.hedgewars.hedgeroid.frontlib.Frontlib.StrBoolCallback;
    39 import android.os.Handler;
    40 import android.os.Handler;
    40 import android.os.HandlerThread;
    41 import android.os.HandlerThread;
    41 import android.os.Looper;
    42 import android.os.Looper;
    42 import android.util.Log;
    43 import android.util.Log;
    43 
    44 
    44 import com.sun.jna.Memory;
       
    45 import com.sun.jna.Pointer;
    45 import com.sun.jna.Pointer;
    46 
    46 
    47 /**
    47 /**
    48  * This class handles both talking to the engine (IPC) for running a game, and
    48  * This class handles both talking to the engine (IPC) for running a game, and
    49  * coordinating with the netconn if it is a netgame, using the frontlib for the
    49  * coordinating with the netconn if it is a netgame, using the frontlib for the
   170 		}
   170 		}
   171 	};
   171 	};
   172 	
   172 	
   173 	// runs on the IPCThread
   173 	// runs on the IPCThread
   174 	private final BytesCallback engineMessageCb = new BytesCallback() {
   174 	private final BytesCallback engineMessageCb = new BytesCallback() {
   175 		public void callback(Pointer context, Pointer buffer, NativeSizeT size) {
   175 		public void callback(Pointer context, ByteArrayPtr buffer, NativeSizeT size) {
   176 			netplay.sendEngineMessage(buffer.getByteArray(0, size.intValue()));
   176 			netplay.sendEngineMessage(buffer.deref(size.intValue()));
   177 		}
   177 		}
   178 	};
   178 	};
   179 	
   179 	
   180 	// runs on the IPCThread
   180 	// runs on the IPCThread
   181 	private final StrCallback errorMessageCb = new StrCallback() {
   181 	private final StrCallback errorMessageCb = new StrCallback() {
   203 		}
   203 		}
   204 		
   204 		
   205 		public void onEngineMessage(final byte[] em) {
   205 		public void onEngineMessage(final byte[] em) {
   206 			handler.post(new Runnable() {
   206 			handler.post(new Runnable() {
   207 				public void run() {
   207 				public void run() {
   208 					Memory mem = new Memory(em.length);
   208 					ByteArrayPtr ptr = ByteArrayPtr.createJavaOwned(em);
   209 					mem.write(0, em, 0, em.length);
   209 					Flib.INSTANCE.flib_gameconn_send_enginemsg(conn, ptr, NativeSizeT.valueOf(em.length));
   210 					Flib.INSTANCE.flib_gameconn_send_enginemsg(conn, mem, NativeSizeT.valueOf(em.length));
       
   211 				}
   210 				}
   212 			});
   211 			});
   213 		}
   212 		}
   214 		
   213 		
   215 		public void onChatMessage(final String nick, final String message) {
   214 		public void onChatMessage(final String nick, final String message) {