15 #define IPC_PORT 51342 |
15 #define IPC_PORT 51342 |
16 #define IPC_PORT_STR "51342" |
16 #define IPC_PORT_STR "51342" |
17 #define BUFFER_SIZE 256 |
17 #define BUFFER_SIZE 256 |
18 |
18 |
19 |
19 |
|
20 // |
|
21 TCPsocket sd, csd; /* Socket descriptor, Client socket descriptor */ |
|
22 |
20 @implementation gameSetup |
23 @implementation gameSetup |
21 |
24 |
|
25 int sendToEngine(NSString *string) { |
|
26 Uint8 length = [string length]; |
|
27 |
|
28 SDLNet_TCP_Send(csd, &length , 1); |
|
29 return SDLNet_TCP_Send(csd, [string UTF8String], length); |
|
30 } |
|
31 |
22 void engineProtocolThread () { |
32 void engineProtocolThread () { |
23 TCPsocket sd, csd; /* Socket descriptor, Client socket descriptor */ |
|
24 IPaddress ip; |
33 IPaddress ip; |
25 int idx, eProto; |
34 int idx, eProto; |
26 BOOL serverQuit, clientQuit; |
35 BOOL serverQuit, clientQuit; |
27 char buffer[BUFFER_SIZE], string[BUFFER_SIZE]; |
36 char buffer[BUFFER_SIZE], string[BUFFER_SIZE]; |
28 Uint8 msgSize; |
37 Uint8 msgSize; |
29 Uint16 gameTicks; |
38 Uint16 gameTicks; |
|
39 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; |
30 |
40 |
31 if (SDLNet_Init() < 0) { |
41 if (SDLNet_Init() < 0) { |
32 fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); |
42 fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError()); |
33 exit(EXIT_FAILURE); |
43 exit(EXIT_FAILURE); |
34 } |
44 } |
63 gameTicks = SDLNet_Read16(&buffer[msgSize - 2]); |
73 gameTicks = SDLNet_Read16(&buffer[msgSize - 2]); |
64 NSLog(@"engineProtocolThread - %d: received [%s]", gameTicks, buffer); |
74 NSLog(@"engineProtocolThread - %d: received [%s]", gameTicks, buffer); |
65 |
75 |
66 if ('C' == buffer[0]) { |
76 if ('C' == buffer[0]) { |
67 NSLog(@"engineProtocolThread - Client found and connected"); |
77 NSLog(@"engineProtocolThread - Client found and connected"); |
|
78 |
|
79 // send config data data |
|
80 |
|
81 // local game |
|
82 sendToEngine(@"TL"); |
|
83 |
|
84 // seed info |
|
85 sendToEngine(@"eseed {232c1b42-7d39-4ee6-adf8-4240e1f1efb8}"); |
|
86 |
|
87 // various flags |
|
88 sendToEngine(@"e$gmflags 256"); |
|
89 |
|
90 // various flags |
|
91 sendToEngine(@"e$damagepct 100"); |
|
92 |
|
93 // various flags |
|
94 sendToEngine(@"e$turntime 45000"); |
|
95 |
|
96 // various flags |
|
97 sendToEngine(@"e$minestime 3000"); |
|
98 |
|
99 // various flags |
|
100 sendToEngine(@"e$landadds 4"); |
|
101 |
|
102 // various flags |
|
103 sendToEngine(@"e$sd_turns 15"); |
|
104 |
|
105 // various flags |
|
106 sendToEngine(@"e$casefreq 5"); |
|
107 |
|
108 // various flags |
|
109 sendToEngine(@"e$template_filter 1"); |
|
110 |
|
111 // theme info |
|
112 sendToEngine(@"etheme Freeway"); |
|
113 |
|
114 // team 1 info |
|
115 sendToEngine(@"eaddteam 4421353 System Cats"); |
|
116 |
|
117 // team 1 grave info |
|
118 sendToEngine(@"egrave star"); |
|
119 |
|
120 // team 1 fort info |
|
121 sendToEngine(@"efort Earth"); |
|
122 |
|
123 // team 1 voicepack info |
|
124 sendToEngine(@"evoicepack Classic"); |
|
125 |
|
126 // team 1 binds (skipped) |
|
127 // team 1 members info |
|
128 //for (int i=0; i<4; i++) { |
|
129 sendToEngine(@"eaddhh 0 100 Snow Leopard"); |
|
130 sendToEngine(@"ehat NoHat"); |
|
131 //} |
|
132 // team 1 ammostore |
|
133 sendToEngine(@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"); |
|
134 |
|
135 // team 2 info |
|
136 sendToEngine(@"eaddteam 4100897 Poke-MAN"); |
|
137 |
|
138 // team 2 grave info |
|
139 sendToEngine(@"egrave Badger"); |
|
140 |
|
141 // team 2 fort info |
|
142 sendToEngine(@"efort UFO"); |
|
143 |
|
144 // team 2 voicepack info |
|
145 sendToEngine(@"evoicepack Classic"); |
|
146 |
|
147 // team 2 binds (skipped) |
|
148 // team 2 members info |
|
149 // for (int i=0; i<4; i++) { |
|
150 sendToEngine(@"eaddhh 0 100 Raichu"); |
|
151 sendToEngine(@"ehat Bunny"); |
|
152 // } |
|
153 |
|
154 // team 2 ammostore |
|
155 sendToEngine(@"eammstore 93919294221991210322351110012010000002110404000441400444645644444774776112211144"); |
|
156 |
68 clientQuit = NO; |
157 clientQuit = NO; |
69 } else { |
158 } else { |
70 NSLog(@"engineProtocolThread - wrong Connected message, closing"); |
159 NSLog(@"engineProtocolThread - wrong message, closing connection"); |
71 clientQuit = YES; |
160 clientQuit = YES; |
72 } |
161 } |
73 |
162 |
74 while (!clientQuit){ |
163 while (!clientQuit){ |
75 /* Now we can communicate with the client using csd socket |
164 /* Now we can communicate with the client using csd socket |
76 * sd will remain opened waiting other connections */ |
165 * sd will remain opened waiting other connections */ |
77 idx = 0; |
166 idx = 0; |
78 msgSize = 0; |
167 msgSize = 0; |
79 memset(buffer, 0, BUFFER_SIZE); |
168 memset(buffer, 0, BUFFER_SIZE); |
80 memset(string, 0, BUFFER_SIZE); |
169 memset(string, 0, BUFFER_SIZE); |
81 SDLNet_TCP_Recv(csd, &msgSize, sizeof(Uint8)); |
170 if (SDLNet_TCP_Recv(csd, &msgSize, sizeof(Uint8)) <= 0) |
82 |
171 clientQuit = YES; |
83 SDLNet_TCP_Recv(csd, buffer, msgSize); |
172 if (SDLNet_TCP_Recv(csd, buffer, msgSize) <=0) |
|
173 clientQuit = YES; |
|
174 |
84 gameTicks = SDLNet_Read16(&buffer[msgSize - 2]); |
175 gameTicks = SDLNet_Read16(&buffer[msgSize - 2]); |
85 NSLog(@"engineProtocolThread - %d: received [%s]", gameTicks, buffer); |
176 //NSLog(@"engineProtocolThread - %d: received [%s]", gameTicks, buffer); |
86 |
177 |
87 switch (buffer[0]) { |
178 switch (buffer[0]) { |
88 case '?': |
179 case '?': |
89 NSLog(@"Ping? Pong!"); |
180 NSLog(@"Ping? Pong!"); |
90 string[idx++] = 0x01; |
181 sendToEngine(@"!"); |
91 string[idx++] = '!'; |
|
92 |
|
93 SDLNet_TCP_Send(csd, string, idx); |
|
94 break; |
182 break; |
95 case 'E': |
183 case 'E': |
96 NSLog(@"ERROR - last console line: [%s]", buffer); |
184 NSLog(@"ERROR - last console line: [%s]", buffer); |
97 clientQuit = YES; |
185 clientQuit = YES; |
98 break; |
186 break; |
99 default: |
187 case 'e': |
100 sscanf(buffer, "%*s %d", &eProto); |
188 sscanf(buffer, "%*s %d", &eProto); |
101 if (HW_protoVer() == eProto) { |
189 if (HW_protoVer() == eProto) { |
102 NSLog(@"Setting protocol version %s", buffer); |
190 NSLog(@"Setting protocol version %s", buffer); |
103 } else { |
191 } else { |
104 NSLog(@"ERROR - wrong protocol number: [%s] - expecting %d", buffer, eProto); |
192 NSLog(@"ERROR - wrong protocol number: [%s] - expecting %d", buffer, eProto); |
105 clientQuit = YES; |
193 clientQuit = YES; |
106 } |
194 } |
107 |
195 break; |
108 break; |
196 default: |
|
197 // empty packet or just statistics |
|
198 break; |
|
199 case 'i': |
|
200 switch (buffer[1]) { |
|
201 case 'r': |
|
202 NSLog(@"Winning team: %s", &buffer[2]); |
|
203 break; |
|
204 case 'k': |
|
205 NSLog(@"Best Hedgehog: %s", &buffer[2]); |
|
206 break; |
|
207 } |
|
208 break; |
|
209 // missing case for exiting |
109 } |
210 } |
110 |
211 |
111 /* |
212 /* |
112 // Terminate this connection |
213 // Terminate this connection |
113 if(strcmp(buffer, "exit") == 0) { |
214 if(strcmp(buffer, "exit") == 0) { |