(and TextGUI windowing library)
Programmed by Jason Winnebeck
3/8 -- The Windows port of MUUDPIC using MSVC and MFC has been (nearly) completed. This version works much better than the original DOS or Linux versions. Its only error at the moment is that it allows duplicate filenames when it should not and does not ping the clients from time to time to see if they are still active. The Dos box under Windows version has been discontinued and removed since it doesn't work nor ever will. The Linux version is also discontinued and will not work with the Windows one since I updated the protocol to make it more reliable and flexible.
10/11 -- The Linux port of MUUDPIC has been released. It would be totally completed except for some curses stuff. Actually my opinion of ncurses is not too great right now, and if anyone would please help, I would appreciate it. I spent 5 minutes (quite literally) porting my logic to Linux, and I've spent over 10-15 hours+ porting only 50 lines of code! Curses seems impossible! For some reason, it doesn't show right on VT100, crashes an xterm, corrupts the screen in ANSI, but corrupts it just slightly less in ANSI.SYS mode. What a wonderful piece of crap.
MUUDPIC stands for Multi-User UDP Internet Chat. The purpose of the project is to create an experimental networking method which will be used in the multiplayer code for Project V2143: The Price of Justice. The server/client pair will act almost in an identical way in the chat as they would in the game, and the server will be useable in the PV2143 code with only a few minor adjustments. More info is available in this document, or in this readme.
The windowing library which was used in DOS/Linux MUUDPIC is available as a completely separate and usable package, and includes the classes CWindow text window and the CWindow based CTextBox input window designed for multitasking. This libraries work under any operating system and in any compiler which can make DOS/console targets and has a conio.h similar to DJGPP's. I would assume this works for Borland, and possibly for VC++, but I am only supporting it offically for DJGPP.
The Windows are easy to use with just the insertion operator. Commands are simple. Set up the window and use commands like: MyWin << "The number " << 5.5 << " was sent to the window\n"; and it appears in the window. More detailed information can be found in the textgui readme, which is the library's documentation.
This library is "bugless" beta meaning everything is working and has been working for awhile but has not been hard-core tested so I'm not calling it totally finished until the final MUUDPIC release.
You can download TextGUI in the download section.
The server will basically act as a "broadcast station" for the clients, while of course optimizing the data to that only needs to be sent. It will keep track of all of the clients and their current data, espically their static data (like name) so it will not have to be constantly retransmitted across the network. The server will also keep track of client entry/exit/timeout, as well as having the responsability of keeping them all in sync.
The clients will first connect to the server through a more reliable TCP/IP method which is protected from packet loss. Then they will send the server their data, in the chat program's case, their user name, and in turn recieve all other users' data from the server. Then this TCP/IP socket will be closed, and everything will go through a separate UDP port.
In a normal chat environment, all messages would be sent using TCP/IP, a reliable protocol used typically in HTTP rather than UDP, a protocol used typically in FTP. However MUUDPIC uses UDP during the chat since the purpose of the program is to simulate the network needed for the PV2143 game, where UDP is needed.
Unlike TCP/IP packets, UDP packets may arrive late, out of order, or never arrive at all, which may sound unbeneficial, but UDP packets require much less overhead and more can be transmitted in a given time. The more packets (and less data) that can be sent, the greater number of network updates, and the lower the ping rates, resulting in smoother network play. Out of order or late UDP packets can be recovered by setting a "delay" in the game, which means an action takes place a set time after you perform it -- real-time stratedgy games like Starcraft use this method.
MUUDPIC does not ping clients from time to time to check to see if clients are still active and have not dropped.
Exactly duplicate names are not handled correctly.
The ncurses code (linux) for TextGUI works fine for the server but there are glitches in the client.
The linux version is no where near as robust as the Windows and doesn't check the data for validity.
Although no harm should result from these programs, I will not be responsible for any damage they may cause to your computer. All source code is copyright 2000 by Jason Winnebeck. You may modify and use the program in any program as long as you give credit for the original code to me.
Download the Program
The Windows client/server program is available here.
The source with MSVC workspace is available here.
The linux source of TextGUI and MUUDPIC with makefiles is available here (20k). It's provided as-is, the logic works (after 5 minutes of work), but the curses interface doesn't work well (even after a week of work). This version is much older than the Windows one and has been discontinued.
Standalone library. Source ready to compile for use available here (13k) along with example code. There is no binary since it is only a library (the example application will compile to an EXE though). Most of the TextGUI library is commented line-by-line.