Author: nornagon
Date: 2005-07-05 10:47:35 -0400 (Tue, 05 Jul 2005)
New Revision: 831
Modified:
trunk/clients/ravish/haver.rb
trunk/clients/ravish/ravish2.rb
Log:
/names like irssi! And probably some other stuff I forgot.
Modified: trunk/clients/ravish/haver.rb
===================================================================
--- trunk/clients/ravish/haver.rb 2005-07-05 07:48:19 UTC (rev 830)
+++ trunk/clients/ravish/haver.rb 2005-07-05 14:47:35 UTC (rev 831)
@@ -29,13 +29,12 @@
end
@sock.add_observer self
event :connected
- msg 'HAVER', 'ravish/0.1.0'
end
def msg *args
m = args.join("\t") + "\r\n"
- puts "C: #{m}" if DEBUG >= 2
@sock.put m
+ event :message_sent, args
end
def update type, *args
@@ -45,8 +44,8 @@
end
def handle_line line
- puts "S: #{line}" if DEBUG >= 2
message = line.split(/\t/)
+ event :message_received, message
cmd = message.shift
event ("ev_" + cmd).to_sym, message
end
Modified: trunk/clients/ravish/ravish2.rb
===================================================================
--- trunk/clients/ravish/ravish2.rb 2005-07-05 07:48:19 UTC (rev 830)
+++ trunk/clients/ravish/ravish2.rb 2005-07-05 14:47:35 UTC (rev 831)
@@ -8,25 +8,209 @@
Thread.abort_on_exception = true
class Ravish
+ ServerPrefix = "%(bblue)-%(bwhite)!%(bblue)-%(default) "
+
+ Palette = {
+ 'bblue' => 'bold blue on de',
+ 'bwhite' => 'bold white on de',
+ 'smesg' => 'bold green on de',
+ 'cmesg' => 'bold cyan on de',
+ 'listtitle' => 'green on de',
+ 'listcid' => 'bold green on de',
+ 'listdecs' => 'bold black on black',
+ 'listitem' => 'de on de',
+ 'nickdecs' => 'bold black on black',
+ 'nick' => 'de on de',
+ 'mynick' => 'bold de on de',
+ }
+
+ Bindings = {
+ ((0..9).to_a + ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
'O']).collect {
+ |k| "A-#{k}" } => :switch_window
+ }
+
def initialize server, port=7070
@term = Term::Visual.new
+ @term.palette.setcolors Palette
+ @term.global_prefix = self.method :global_prefix
+ @term.on_got_line self.method(:got_line)
+ Bindings.each { |k, v|
+ if v.kind_of? Symbol
+ v = self.method v
+ end
+ if k.kind_of?(Array)
+ k.each { |key|
+ @term.bind key, v
+ }
+ else
+ @term.bind k, v
+ end
+ }
+ @servwin = @term.create_window('title' => 'Ravish')
+ @windows = [['(server)', @servwin]]
+ @server = server
+ @port = port
@haver = Haver::Client.new server
@haver.add_observer self
@haver.start
end
+
+ def global_prefix
+ Time.now.strftime "%H:%M:%S "
+ end
+
+ def srvmsg *args
+ args.each { |arg|
+ @servwin.addline arg, ServerPrefix
+ }
+ end
+
+ def got_line line
+ if line =~ /^[.\/]{1,2}([^.\/].*)/
+ # command
+ args = $1.split(/ /)
+ cmd = args.shift
+ func = "user_" + cmd.upcase
+ if self.respond_to?(func)
+ self.send func, args
+ else
+ self.send 'unknown_user_cmd', cmd, args
+ end
+ end
+ end
def update type, *args
case type
when :connecting
- puts 'connecting'
+ srvmsg "Connecting to [EMAIL PROTECTED]:[EMAIL
PROTECTED]"
when :connected
- puts 'connected'
- when :ev_HAVER
- @haver.msg 'IDENT', 'nornagon'
+ srvmsg 'Connected.'
+ @haver.msg 'HAVER', 'Ravish/0.1.0'
+ when :message_sent
+ srvmsg "%(cmesg)C: #{args[0].inspect}"
+ when :message_received
+ srvmsg "%(smesg)S: #{args[0].inspect}"
+ else
+ if type.to_s =~ /^ev_([A-Z:]+)$/
+ if self.respond_to?(type)
+ self.send type, *args[0]
+ else
+ self.send 'unknown_ev', $1, args[0]
+ end
+ end
end
end
+
+ ## HELPER METHODS ##
+
+ def find_window name
+ if name.kind_of?(Term::Visual::Window)
+ @windows.rassoc(name)
+ else
+ @windows.assoc(name)
+ end
+ end
+
+ ## TERM HANDLING ##
+
+ def switch_window ch
+ win = nil
+ if ch == ?1 then win = 1
+ elsif ch == ?2 then win = 2
+ elsif ch == ?3 then win = 3
+ elsif ch == ?4 then win = 4
+ elsif ch == ?5 then win = 5
+ elsif ch == ?6 then win = 6
+ elsif ch == ?7 then win = 7
+ elsif ch == ?8 then win = 8
+ elsif ch == ?9 then win = 9
+ elsif ch == ?0 then win = 10
+ elsif ch == ?q then win = 11
+ elsif ch == ?w then win = 12
+ elsif ch == ?e then win = 13
+ elsif ch == ?r then win = 14
+ elsif ch == ?t then win = 15
+ elsif ch == ?y then win = 16
+ elsif ch == ?u then win = 17
+ elsif ch == ?i then win = 18
+ elsif ch == ?o then win = 19
+ else
+ return
+ end
+ if @windows[win-1] and to = @windows[win-1][1]
+ unless to == @term.current_window
+ srvmsg "switching to window #{win-1}
(A-#{ch.chr}) (#{to})"
+ @term.switch_window to
+ end
+ end
+ end
+
+ ## SERVER MESSAGES ##
+
+ def unknown_ev cmd, args
+ srvmsg "Unknown event received from server: #{cmd} args: " +
+ args.inspect
+ end
+
+ def ev_HAVER server, version
+ srvmsg "Server #{server} running #{version}"
+ @haver.msg 'IDENT', 'nornagon'
+ end
+
+ def ev_HELLO nick
+ srvmsg "Server accepted uid #{nick}"
+ @nick = nick
+ end
+
+ def ev_PING data
+ @haver.msg 'PONG', data
+ end
+
+ def ev_JOIN cid, uid
+ if @nick and uid == @nick
+ unless (win = find_window cid)
+ win = @term.create_window('title' => cid)
+ @windows << [cid, win]
+ @term.switch_window win
+ end
+ @haver.msg 'LIST', cid, 'user'
+ end
+ end
+
+ def ev_LIST cid, ns, *users
+ if ns == 'user'
+ listed = 'Users'
+ elsif ns == 'channel'
+ listed = 'Channels'
+ else
+ listed = ns
+ end
+ win = find_window(cid)[1] || @servwin
+ win.print "%(listdecs)[%(listtitle)#{listed} %(listcid)#{cid}"+
+ "%(listdecs)]%(default)"
+ users += ['aakeuser1', 'cakeuser2', 'dake_usaaaaar',
'fake!user',
+ 'gake.user', 'fake|user']
+ users += users + ['buser']
+ users.sort!
+ win.columnize users, {'before_each' =>
'%(listdecs)[%(listitem)',
+ 'after_each' =>
'%(listdecs)]%(default)'}
+ end
+
+ ## CLIENT COMMANDS ##
+
+ def unknown_user_cmd cmd, args
+ srvmsg "Unknown command: #{cmd}"
+ end
+
+ def user_JOIN args
+ @haver.msg 'JOIN', args[0]
+ end
+
+ def user_RAW args
+ @haver.msg args.shift.upcase, *args
+ end
end
-ravish = Ravish.new 'hardison.net'
+ravish = Ravish.new 'localhost'
EventManager.instance.run