project_files/Android-build/SDL-android-project/src/org/hedgewars/mobile/EngineProtocol/EngineProtocolNetwork.java
branchhedgeroid
changeset 5943 5b2b86a37089
parent 5621 ea796c83ea47
equal deleted inserted replaced
5941:db4751cb4f53 5943:5b2b86a37089
    24 import java.io.OutputStream;
    24 import java.io.OutputStream;
    25 import java.net.ServerSocket;
    25 import java.net.ServerSocket;
    26 import java.net.Socket;
    26 import java.net.Socket;
    27 import java.net.UnknownHostException;
    27 import java.net.UnknownHostException;
    28 
    28 
    29 public class EngineProtocolNetwork implements Runnable{
    29 public class EngineProtocolNetwork extends Thread{
    30 
    30 
    31 	public static final String GAMEMODE_LOCAL = "TL";
    31 	public static final String GAMEMODE_LOCAL = "TL";
    32 	public static final String GAMEMODE_DEMO = "TD";
    32 	public static final String GAMEMODE_DEMO = "TD";
    33 	public static final String GAMEMODE_NET = "TN";
    33 	public static final String GAMEMODE_NET = "TN";
    34 	public static final String GAMEMODE_SAVE = "TS";
    34 	public static final String GAMEMODE_SAVE = "TS";
    41 	private ServerSocket serverSocket;
    41 	private ServerSocket serverSocket;
    42 	private InputStream input;
    42 	private InputStream input;
    43 	private OutputStream output;
    43 	private OutputStream output;
    44 	public int port;
    44 	public int port;
    45 	private final GameConfig config;
    45 	private final GameConfig config;
       
    46 	private boolean clientQuit = false;
    46 
    47 
    47 	public EngineProtocolNetwork(GameConfig _config){
    48 	public EngineProtocolNetwork(GameConfig _config){
    48 		config = _config;
    49 		config = _config;
    49 		try {
    50 		try {
    50 			serverSocket = new ServerSocket(0);
    51 			serverSocket = new ServerSocket(0);
    62 		//if(mode == MODE_GENLANDPREVIEW) genLandPreviewIPC();
    63 		//if(mode == MODE_GENLANDPREVIEW) genLandPreviewIPC();
    63 		/*else if (mode == MODE_GAME)*/ gameIPC();
    64 		/*else if (mode == MODE_GAME)*/ gameIPC();
    64 	}
    65 	}
    65 	
    66 	
    66 	private void gameIPC(){
    67 	private void gameIPC(){
       
    68 		Socket sock = null;
    67 		try{
    69 		try{
    68 			Socket sock = serverSocket.accept();
    70 			sock = serverSocket.accept();
    69 			input = sock.getInputStream();
    71 			input = sock.getInputStream();
    70 			output = sock.getOutputStream();
    72 			output = sock.getOutputStream();
    71 			
    73 			
    72 			boolean clientQuit = false;
       
    73 			int msgSize = 0;
    74 			int msgSize = 0;
    74 			byte[] buffer = new byte[BUFFER_SIZE];
    75 			byte[] buffer = new byte[BUFFER_SIZE];
    75 
    76 
    76 			while(!clientQuit){
    77 			while(!clientQuit){
    77 				msgSize = 0;
    78 				msgSize = 0;
    78 
    79 
    79 				input.read(buffer, 0, 1);
    80 				input.read(buffer, 0, 1);
    80 				msgSize = buffer[0];
    81 				msgSize = buffer[0];
    81 
    82 
    82 				input.read(buffer, 0, msgSize);
    83 				input.read(buffer, 0, msgSize);
    83 
    84 				System.out.println("IPC" + (char)buffer[0] + " : " + new String(buffer, 1,msgSize-1, "US_ASCII"));
    84 				switch(buffer[0]){
    85 				switch(buffer[0]){
    85 				case 'C'://game init
    86 				case 'C'://game init
    86 					config.sendToEngine(this);
    87 					config.sendToEngine(this);
    87 					break;
    88 					break;
    88 				case '?'://ping - pong
    89 				case '?'://ping - pong
    89 					sendToEngine("!");
    90 					sendToEngine("!");
    90 					break;
    91 					break;
    91 				case 'E'://error - quits game
    92 				case 'e'://Send protocol version
    92 
    93 					System.out.println(new String(buffer));
    93 					break;
       
    94 				case 'e':
       
    95 
       
    96 					break;
    94 					break;
    97 				case 'i'://game statistics
    95 				case 'i'://game statistics
    98 					switch(buffer[1]){
    96 					switch(buffer[1]){
    99 					case 'r'://winning team
    97 					case 'r'://winning team
   100 						break;
    98 						break;
   115 					case 'S'://friendly fire
   113 					case 'S'://friendly fire
   116 						break;
   114 						break;
   117 					case 'B'://turn skipped
   115 					case 'B'://turn skipped
   118 						break;
   116 						break;
   119 					default:
   117 					default:
   120 
       
   121 					}
   118 					}
   122 					break;
   119 					break;
       
   120 				case 'E'://error - quits game
       
   121 					System.out.println(new String(buffer));
       
   122 					return;
   123 				case 'q'://game ended remove save file
   123 				case 'q'://game ended remove save file
   124 
   124 
   125 					break;
   125 				    return;
   126 				case 'Q'://game ended but not finished
   126 				case 'Q'://game ended but not finished
   127 
   127 
   128 					break;
   128 					return;
   129 				}
   129 				}
   130 
   130 
   131 			}
   131 			}
   132 
       
   133 		}catch(IOException e){
   132 		}catch(IOException e){
   134 			e.printStackTrace();
   133 			e.printStackTrace();
       
   134 		}finally{
       
   135 			try {
       
   136 				if(sock != null) sock.close();
       
   137 			} catch (IOException e) {}
       
   138 			try{
       
   139 				if(serverSocket != null) serverSocket.close();
       
   140 			} catch (IOException e) {}
   135 		}
   141 		}
   136 	}
   142 	}
   137 
   143 
   138 	public void sendToEngine(String s){
   144 	public void sendToEngine(String s){
   139 		int length = s.length();
   145 		int length = s.length();
   142 			output.write(length);
   148 			output.write(length);
   143 			output.write(s.getBytes(), 0, length);
   149 			output.write(s.getBytes(), 0, length);
   144 		} catch (IOException e) {
   150 		} catch (IOException e) {
   145 			e.printStackTrace();
   151 			e.printStackTrace();
   146 		}
   152 		}
   147 		
   153 	}
   148 		
   154 	
       
   155 	public void quitIPC(){
       
   156 		clientQuit = true;
   149 	}
   157 	}
   150 	
   158 	
   151 }
   159 }