diff -r ce3ccc45d790 -r 5012e1f9e893 hedgewars/uIO.pas --- a/hedgewars/uIO.pas Fri Aug 22 00:37:26 2014 +0400 +++ b/hedgewars/uIO.pas Fri Aug 22 00:57:07 2014 +0400 @@ -118,9 +118,22 @@ WriteLnToConsole(msgOK) end; +procedure ParseChatCommand(command: shortstring; message: shortstring; + messageStartIndex: Byte); +var + text: shortstring; +begin + text:= copy(message, messageStartIndex, + Length(message) - messageStartIndex + 1); + ParseCommand(command + text, true); + WriteLnToConsole(text) +end; + procedure ParseIPCCommand(s: shortstring); var loTicks: Word; + isProcessed: boolean; begin +isProcessed := true; case s[1] of '!': begin AddFileLog('Ping? Pong!'); isPonged:= true; end; @@ -140,12 +153,26 @@ 'V': begin if s[2] = '.' then ParseCommand('campvar ' + copy(s, 3, length(s) - 2), true); - end + end; + 'I': ParseCommand('pause server', true); + 's': if gameType = gmtNet then + ParseChatCommand('chatmsg ', s, 2) + else + isProcessed:= false; + 'b': if gameType = gmtNet then + ParseChatCommand('chatmsg ' + #4, s, 2) + else + isProcessed:= false; else - loTicks:= SDLNet_Read16(@s[byte(s[0]) - 1]); - AddCmd(loTicks, s); - AddFileLog('[IPC in] ' + sanitizeCharForLog(s[1]) + ' ticks ' + IntToStr(lastcmd^.loTime)); - end + isProcessed:= false; + end; + + if (not isProcessed) then + begin + loTicks:= SDLNet_Read16(@s[byte(s[0]) - 1]); + AddCmd(loTicks, s); + AddFileLog('[IPC in] ' + sanitizeCharForLog(s[1]) + ' ticks ' + IntToStr(lastcmd^.loTime)); + end end; procedure IPCCheckSock; @@ -357,16 +384,8 @@ s:= copy(headcmd^.str, 2, Pred(headcmd^.len)); ParseCommand('gencmd ' + s, true); end; - 's': begin - s:= copy(headcmd^.str, 2, Pred(headcmd^.len)); - ParseCommand('chatmsg ' + s, true); - WriteLnToConsole(s) - end; - 'b': begin - s:= copy(headcmd^.str, 2, Pred(headcmd^.len)); - ParseCommand('chatmsg ' + #4 + s, true); - WriteLnToConsole(s) - end; + 's': ParseChatCommand('chatmsg ', headcmd^.str, 2); + 'b': ParseChatCommand('chatmsg ' + #4, headcmd^.str, 2); 'F': ParseCommand('teamgone u' + copy(headcmd^.str, 2, Pred(headcmd^.len)), true); 'G': ParseCommand('teamback u' + copy(headcmd^.str, 2, Pred(headcmd^.len)), true); 'f': ParseCommand('teamgone s' + copy(headcmd^.str, 2, Pred(headcmd^.len)), true);