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(); |