[REBOL] REBOL MUD server -- a few easy questions
From: seth::chromick::earthlink::net at: 9-Nov-2003 2:38
I've never been content with the documentation I've found relating to
the usage of tcp based ports. The official REBOL documentation lightly
touches on them but it's never been detailed enough, at least in my
opinion. So here I am, with a few questions for the list :]
The ultimate end goal for this project is a simple MUD (if you don't
know what a MUD is, you can generally think of it as a game like
EverQuest without the graphics) or chat server, that clients connect to
via. telnet. The finer details I can work out myself (I've been playing
with Rebol for a long time now) but it seems to be the fundamentals I'm
having problems with, those being:
Accepting new incoming connections
Keeping track of who is already connected
Sending text from one client to all connected clients
I have some clunky code I've patched together by looking at several
other people's scripts and reading the docs. Here it is:
---
REBOL []
print ["The MUD server has started on" now/date ", at" now/time]
server-port: open/lines tcp://:23 ; listen for connections on port 23
(standard telnet port)
connections: copy [] ; connections[] holds the list of port! objects
forever [
connection-port: first server-port ; connection-port is the currently
active connection -- should this be connection-port: WAIT first
server-port?
until [
wait connection-port ; wait until there is activity on the port
append connections connection-port ; add the newest port into the
connections[] block
foreach connection connections [ ; in this loop i was going to
have it check to see if any of the clients listed in 'connections[] are
still active -- what is an easy way to do this?
x: reform ["There are now " length? connections " clients
connected."]
insert connection x
]
]
]
---
I am 200% open to suggestions on how to improve this code (and also
-why- method X would be better/faster/etc. than method Y)... :] I want
to make this code as good as possible because I have a lot of other
things to focus on and they all depend on a reliable method for
connecting and managing the connections!
1) How can I send text from one client to all the clients? Will I have
to do anything special because I'm telneting to the server? (Using PuTTy)
2) What would be the best way to keep track of what clients are still
connected and which ones have timed out or totally disconnected?
3) I have looked at Rugby and the examples on RebolForces for a 'server
engine'. My project (as of right now) is basically sending text to and
from telneted clients. Nothing very demanding, per say. When I start
adding features to the MUD (i.e. actually making it into a game), it
might get more resource hungry. Any suggestions of my current 'engine'
versus a more complex one?