Jan S. wrote:
commands that can be typed pointing to the function name (like
{“<command”, function_name} so that when they type the command that’s
listed there it will find the correct function and run it) I need help
on how to go about this, psuedo code, code examples etc.
Have a look at Socket::TCPServer in stdlib. That would be the base for
your server.
You may also want to look at GServer[1] in the standard library, which
is probably simpler to use. Putting this together with the Observer[2]
class, it makes it fairly simple, as long as you are okay with handling
threads and such. I’d recommend using YAML[3] for storing your users and
their settings/passwords/etc.
For the basic idea, you might start off with something like this (simply
echoes input to everyone):
require ‘gserver’
require ‘observer’
class MyServer < GServer
include Observable
def initialize(port = 5555, *args)
super(port, *args)
end
def serve(io)
user = User.new(io)
self.add_observer(user)
user.add_observer(self)
user.run
end
def update(message)
changed
notify_observers(message)
end
end
class User
include Observable
def initialize(io)
@io = io
end
def update(message)
@io.puts message
end
def run
loop do
input = @io.gets
changed
notify_observers(input)
end
end
end
MyServer.new.start.join
Just run that, and connect a couple of telnet sessions to port 5555.
Type in a message and it should be echoed to everyone. Hooray!
Note that MyServer and User are both observing each other, so that the
server can echo a message from any user to all the others (including the
original sender). This simplifies having to worry about threads and
queues and such.
I hope that will give you some ideas.
-Justin
[1]http://ruby-doc.org/stdlib/libdoc/gserver/rdoc/index.html
[2]http://ruby-doc.org/stdlib/libdoc/observer/rdoc/index.html
[3]http://yaml4r.sourceforge.net/doc/