MUD Information

Posted by Lakedoo23 on Mon 03 Sep 2012 05:24 AM — 2 posts, 13,212 views.

#0
Hello Nick,

I am having an issue with game data from a mud server being split across 2 packets, so essentially the game text is in 2 seperate packets and the interpreter has no idea what either game data is. Have you ever had to deal with this kind of issue when you were writing your mud clients? I would be interested to hear your thoughts on solving this issue I am facing.


Thanks!
Australia Forum Administrator #1
That's perfectly normal. Packets can break anywhere. You need to have a "state machine" to process incoming data. Effectively you should be able to handle even if each packet had a single byte in it.

MUSHclient's state machine for incoming text is here:

https://github.com/nickgammon/mushclient/blob/master/doc.cpp

In particular the function CMUSHclientDoc::DisplayMsg which is currently at line 1818 in that file.

A little way down (line 2110 at present) is a switch statement that processes the current character. It alters the current "state" (called m_phase in the code), for example:


      case ESC:   if (!(flags & NOTE_OR_COMMAND))
                    m_phase = HAVE_ESC;   // start of ANSI escape sequence
                  break;

      case IAC:   // Interpret As Command (however IAC IAC is just IAC)
                
                  if (!(flags & NOTE_OR_COMMAND)) 
                    {
                    if (m_phase == HAVE_IAC)