A basic chat program

Okay I’m looking to make a basic chat program that I can connect to via
telnet for learning purposes.

I want a user to connect then login in or be able to create a new user,
new users would be saved as files. then when they’re in the program they
can talk on different channels by typing “channel1 " or
“channel2 " etc. Also I’d like to put the code in different
files i.e. connection/login/user create code in one file, the
channel/talk functions in another and in a third file a list of the
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.

On 10/17/06, Michael H. [email protected] wrote:

{"<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.

Michael,

Jon L. is developing a mud server which should have most of the
functionality and architecture you’re looking for, it would be a good
example to see how things are put together.

Unfortunately Lambert’s servers are offline and I don’t know when
they’re coming back on; however there is an archive of the 07-07-2006
2.10 release at this site:

http://www.mudmagic.com/codes/server-snippet/2437

best, George

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/

On 10/17/06, Justin C. [email protected] wrote:

require ‘gserver’
user = User.new(io)

[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/

You may also want to look into eventmachine, a really nice event
driven framework for developing network applications.

http://rubyforge.org/projects/eventmachine

On Oct 16, 2006, at 5:24 PM, Michael H. wrote:

Okay I’m looking to make a basic chat program that I can connect to
via
telnet for learning purposes.

Page 533 of the Ruby Cookbook has a slim but functional chat server
in about 30 lines of Ruby code.

James Edward G. II

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs