hedgewars/uFLNet.pas
branchqmlfrontend
changeset 11415 05cf35103206
parent 11413 ffff8a0d1a76
child 11418 091149424aa4
equal deleted inserted replaced
11413:ffff8a0d1a76 11415:05cf35103206
     4 procedure connectOfficialServer;
     4 procedure connectOfficialServer;
     5 
     5 
     6 procedure initModule;
     6 procedure initModule;
     7 procedure freeModule;
     7 procedure freeModule;
     8 procedure sendNet(s: shortstring);
     8 procedure sendNet(s: shortstring);
       
     9 procedure sendNetLn(s: shortstring);
     9 
    10 
    10 implementation
    11 implementation
    11 uses SDLh, uFLIPC, uFLTypes, uFLUICallback, uFLNetTypes, uFLUtils;
    12 uses SDLh, uFLIPC, uFLTypes, uFLUICallback, uFLNetTypes, uFLUtils;
    12 
    13 
    13 const endCmd: string = #10 + #10;
    14 const endCmd: string = #10 + #10;
    79 procedure handler_MS;
    80 procedure handler_MS;
    80 var cmd: TCmdParamS;
    81 var cmd: TCmdParamS;
    81     f: boolean;
    82     f: boolean;
    82 begin
    83 begin
    83     sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
    84     sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
    84     writeln('handler_MS');
       
    85     cmd.cmd:= Succ(state.cmd);
    85     cmd.cmd:= Succ(state.cmd);
    86 
    86 
    87     repeat
    87     repeat
    88         cmd.str1:= getShortString;
    88         cmd.str1:= getShortString;
    89         f:= cmd.str1[0] <> #0;
    89         f:= cmd.str1[0] <> #0;
    97     writeln('handler_S');
    97     writeln('handler_S');
    98     handleTail()
    98     handleTail()
    99 end;
    99 end;
   100 
   100 
   101 procedure handler_SL;
   101 procedure handler_SL;
   102 begin
   102 var cmd: TCmdParamSL;
   103     writeln('handler_SL');
   103 begin
       
   104     cmd.cmd:= state.cmd;
       
   105     cmd.str1:= getShortString;
       
   106     cmd.str2:= getShortString; // FIXME should be long string
       
   107     sendUI(mtNetData, @cmd, sizeof(cmd));
   104     handleTail()
   108     handleTail()
   105 end;
   109 end;
   106 
   110 
   107 procedure handler_SMS;
   111 procedure handler_SMS;
   108 begin
   112 begin
   193     end;
   197     end;
   194 
   198 
   195     getNextChar:= state.buf[state.bufpos];
   199     getNextChar:= state.buf[state.bufpos];
   196 end;
   200 end;
   197 
   201 
   198 function netWriter(sock: PTCPSocket): LongInt; cdecl; export;
       
   199 begin
       
   200     netWriter:= 0;
       
   201 end;
       
   202 
       
   203 function netReader(data: pointer): LongInt; cdecl; export;
   202 function netReader(data: pointer): LongInt; cdecl; export;
   204 var c: char;
   203 var c: char;
   205     ipaddr: TIPAddress;
   204     ipaddr: TIPAddress;
   206 begin
   205 begin
   207     netReader:= 0;
   206     netReader:= 0;
   208 
   207 
   209     if SDLNet_ResolveHost(ipaddr, PChar('netserver.hedgewars.org'), 46631) = 0 then
   208     if SDLNet_ResolveHost(ipaddr, PChar('netserver.hedgewars.org'), 46631) = 0 then
   210         sock:= SDLNet_TCP_Open(ipaddr);
   209         sock:= SDLNet_TCP_Open(ipaddr);
   211 
       
   212     SDL_CreateThread(@netWriter, 'netWriter', sock);
       
   213 
   210 
   214     repeat
   211     repeat
   215         c:= getNextChar;
   212         c:= getNextChar;
   216         //writeln('>>>>> ', c, ' [', letters[state.l], '] ', commands[state.l]);
   213         //writeln('>>>>> ', c, ' [', letters[state.l], '] ', commands[state.l]);
   217         if c = #0 then
   214         if c = #0 then
   236                 handleTail()
   233                 handleTail()
   237             end
   234             end
   238         end
   235         end
   239     until state.netState = netDisconnected;
   236     until state.netState = netDisconnected;
   240 
   237 
       
   238     SDLNet_TCP_Close(sock);
   241     sock:= nil;
   239     sock:= nil;
   242 
   240 
   243     writeln('[NET] netReader: disconnected');
   241     writeln('[NET] netReader: disconnected');
   244 end;
   242 end;
   245 
   243 
   246 procedure sendNet(s: shortstring);
   244 procedure sendNet(s: shortstring);
   247 begin
   245 begin
   248     writeln('[NET] Send: ', s);
   246     writeln('[NET] Send: ', s);
   249     ipcToNet(s + endCmd);
   247     ipcToNet(s + endCmd);
       
   248 end;
       
   249 
       
   250 procedure sendNetLn(s: shortstring);
       
   251 begin
       
   252     writeln('[NET] Send: ', s);
       
   253     ipcToNet(s + #10);
   250 end;
   254 end;
   251 
   255 
   252 function getShortString: shortstring;
   256 function getShortString: shortstring;
   253 var s: shortstring;
   257 var s: shortstring;
   254     c: char;
   258     c: char;
   284 
   288 
   285     state.l:= 0;
   289     state.l:= 0;
   286     state.netState:= netConnecting;
   290     state.netState:= netConnecting;
   287 
   291 
   288     netReaderThread:= SDL_CreateThread(@netReader, 'netReader', nil);
   292     netReaderThread:= SDL_CreateThread(@netReader, 'netReader', nil);
       
   293     SDL_DetachThread(netReaderThread)
   289 end;
   294 end;
   290 
   295 
   291 procedure initModule;
   296 procedure initModule;
   292 begin
   297 begin
   293     sock:= nil;
   298     sock:= nil;