Here is a (non-tested) sample:
Portz: copy []
Server-port: open/no-wait tcp://:9090
Insert portz server-port
Forever
[
;Use wait/all as all our ports are in one block
current: wait/all portz
;If it's the server accept and add to the list
either server-port = current
[
append portz current
]
;it's data from a client
[
;get the data
data: copy current
;if the data is none then the connection has closed
either none? Data
[
;port closed, remove it from our block
remove find portz current
]
[
;broadcast data, skip the server port
foreach port at portz 2
[
insert port data
]
]
]
]
Note that the port is opend in no-wait, meaning something like "This is
a message" will be broadcasted as it is received, like "This i" "s a me"
"ssage" for example. You can add buffering and line termination to this
if you want to. Left as an exercise for the reader ;-)
--Maarten
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
Of
> Seth
> Sent: zondag 9 november 2003 8:39
> To: [EMAIL PROTECTED]
> Subject: [REBOL] REBOL MUD server -- a few easy questions
>
>
> 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?
>
>
> --
> To unsubscribe from this list, just send an email to
> [EMAIL PROTECTED] with unsubscribe as the subject.
--
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.