Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > A basic chat program

Reply
Thread Tools

A basic chat program

 
 
Michael Hall
Guest
Posts: n/a
 
      10-16-2006
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 <message>" or
"channel2 <message>" 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.

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Jan Svitok
Guest
Posts: n/a
 
      10-16-2006
On 10/17/06, Michael Hall <(E-Mail Removed)> wrote:
> 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 <message>" or
> "channel2 <message>" 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.


Have a look at Socket::TCPServer in stdlib. That would be the base for
your server.

 
Reply With Quote
 
 
 
 
georgeoliverGO@gmail.com
Guest
Posts: n/a
 
      10-17-2006
Michael,

Jon Lambert 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


Michael Hall wrote:
> 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 <message>" or
> "channel2 <message>" 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.
>
> --
> Posted via http://www.ruby-forum.com/.


 
Reply With Quote
 
Justin Collins
Guest
Posts: n/a
 
      10-17-2006
Jan Svitok wrote:
> On 10/17/06, Michael Hall <(E-Mail Removed)> wrote:
>> 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 <message>" or
>> "channel2 <message>" 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.

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



 
Reply With Quote
 
hemant
Guest
Posts: n/a
 
      10-17-2006
On 10/17/06, Justin Collins <(E-Mail Removed)> wrote:
>
> 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/
>
>
>
>



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

http://rubyforge.org/projects/eventmachine
--
There was only one Road; that it was like a great river: its springs
were at every doorstep, and every path was its tributary.

 
Reply With Quote
 
James Edward Gray II
Guest
Posts: n/a
 
      11-09-2006
On Oct 16, 2006, at 5:24 PM, Michael Hall 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 Gray II

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Chat Server and Chat Client for INTRANET diptanu@gmail.com Java 0 01-30-2006 06:56 PM
[ANN] August 3, "ADO.NET with Visual Basic .NET" chat Jason Cooke [MSFT] ASP .Net 0 08-02-2004 11:58 PM
[ANN] July 6, "Web Forms Development with Visual Basic .NET" chat Jason Cooke [MSFT] ASP .Net 0 07-01-2004 05:22 PM
[ANN] February 3, "Web Forms Development with Visual Basic .NET" Chat Jason Cooke [MSFT] ASP .Net 0 01-30-2004 10:44 PM
[ANN] October 7, "Web Forms Development with Visual Basic .NET" chat Jason Cooke [MSFT] ASP .Net 0 10-03-2003 05:09 PM



Advertisments