project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/EngineProtocol/EngineProtocolNetwork.java
branchhedgeroid
changeset 5475 06a87ff38ffb
parent 5433 8f82045953c1
child 5508 dcf1b3645af6
equal deleted inserted replaced
5473:a68f900c4e8c 5475:06a87ff38ffb
       
     1 package org.hedgewars.mobile.EngineProtocol;
       
     2 
       
     3 import java.io.IOException;
       
     4 import java.io.InputStream;
       
     5 import java.io.OutputStream;
       
     6 import java.net.ServerSocket;
       
     7 import java.net.Socket;
       
     8 import java.net.UnknownHostException;
       
     9 
       
    10 import android.util.Log;
       
    11 
       
    12 public class EngineProtocolNetwork implements Runnable{
       
    13 
       
    14 	public static final String GAMEMODE_LOCAL = "TL";
       
    15 	public static final String GAMEMODE_DEMO = "TD";
       
    16 	public static final String GAMEMODE_NET = "TN";
       
    17 	public static final String GAMEMODE_SAVE = "TS";
       
    18 	
       
    19 	public static final int BUFFER_SIZE = 255; //From iOS code which got it from the origional frontend
       
    20 	
       
    21 	public static final int MODE_GENLANDPREVIEW = 0;
       
    22 	public static final int MODE_GAME = 1;
       
    23 
       
    24 	private ServerSocket serverSocket;
       
    25 	private InputStream input;
       
    26 	private OutputStream output;
       
    27 	public int port;
       
    28 	private final GameConfig config;
       
    29 
       
    30 	public EngineProtocolNetwork(GameConfig _config){
       
    31 		config = _config;
       
    32 		try {
       
    33 			serverSocket = new ServerSocket(0);
       
    34 			port = serverSocket.getLocalPort();
       
    35 			Thread ipcThread = new Thread(this, "IPC - Thread");			
       
    36 			ipcThread.start();
       
    37 		} catch (UnknownHostException e) {
       
    38 			e.printStackTrace();
       
    39 		} catch (IOException e) {
       
    40 			e.printStackTrace();
       
    41 		}
       
    42 	}
       
    43 	
       
    44 	public void run(){
       
    45 		//if(mode == MODE_GENLANDPREVIEW) genLandPreviewIPC();
       
    46 		/*else if (mode == MODE_GAME)*/ gameIPC();
       
    47 	}
       
    48 	
       
    49 	private void genLandPreviewIPC(){
       
    50 		
       
    51 	}
       
    52 	
       
    53 	private void gameIPC(){
       
    54 		try{
       
    55 			Socket sock = serverSocket.accept();
       
    56 			input = sock.getInputStream();
       
    57 			output = sock.getOutputStream();
       
    58 			
       
    59 			boolean clientQuit = false;
       
    60 			int msgSize = 0;
       
    61 			byte[] buffer = new byte[BUFFER_SIZE];
       
    62 
       
    63 			while(!clientQuit){
       
    64 				msgSize = 0;
       
    65 
       
    66 				input.read(buffer, 0, 1);
       
    67 				msgSize = buffer[0];
       
    68 
       
    69 				input.read(buffer, 0, msgSize);
       
    70 
       
    71 				switch(buffer[0]){
       
    72 				case 'C'://game init
       
    73 					config.sendToEngine(this);
       
    74 					break;
       
    75 				case '?'://ping - pong
       
    76 					sendToEngine("!");
       
    77 					break;
       
    78 				case 'E'://error - quits game
       
    79 
       
    80 					break;
       
    81 				case 'e':
       
    82 
       
    83 					break;
       
    84 				case 'i'://game statistics
       
    85 					switch(buffer[1]){
       
    86 					case 'r'://winning team
       
    87 						break;
       
    88 					case 'D'://best shot
       
    89 						break;
       
    90 					case 'k'://best hedgehog
       
    91 						break;
       
    92 					case 'K'://# hogs killed
       
    93 						break;
       
    94 					case 'H'://team health graph
       
    95 						break;
       
    96 					case 'T':// local team stats
       
    97 						break;
       
    98 					case 'P'://teams ranking
       
    99 						break;
       
   100 					case 's'://self damage
       
   101 						break;
       
   102 					case 'S'://friendly fire
       
   103 						break;
       
   104 					case 'B'://turn skipped
       
   105 						break;
       
   106 					default:
       
   107 
       
   108 					}
       
   109 					break;
       
   110 				case 'q'://game ended remove save file
       
   111 
       
   112 					break;
       
   113 				case 'Q'://game ended but not finished
       
   114 
       
   115 					break;
       
   116 				}
       
   117 
       
   118 			}
       
   119 
       
   120 		}catch(IOException e){
       
   121 			e.printStackTrace();
       
   122 		}
       
   123 	}
       
   124 
       
   125 	public void sendToEngine(String s){
       
   126 		int length = s.length();
       
   127 		
       
   128 		try {
       
   129 			output.write(length);
       
   130 			output.write(s.getBytes(), 0, length);
       
   131 		} catch (IOException e) {
       
   132 			e.printStackTrace();
       
   133 		}
       
   134 		
       
   135 		
       
   136 	}
       
   137 	
       
   138 }