From 5e0802b23aa43ce46de5374b0d15f384d5e49697 Mon Sep 17 00:00:00 2001 From: Charles Bachhuber Date: Wed, 24 Sep 2008 17:14:37 -0500 Subject: [PATCH] LOADS of work on the core stuff --- ttsock.rb | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 97 insertions(+), 20 deletions(-) diff --git a/ttsock.rb b/ttsock.rb index be65286..d02ee72 100644 --- a/ttsock.rb +++ b/ttsock.rb @@ -13,6 +13,24 @@ class TTSock @name = name connect() + start_reader() + end + + def msg(msgtype, payload) + @socket << [4 + payload.length, TTDefs::MSGS[msgtype], payload].pack("VVA" + payload.length.to_s) + end + + def start_reader() + @queue = Queue.new + Thread.new() do + while @connected + select([@socket]) + packet = @socket.recv(@socket.recv(4).unpack("V")[0]) + msgtype = packet.unpack("V")[0] + payload = packet.slice(4..packet.length) + @queue << [TTDefs::MSGS.invert[msgtype], payload] + end + end end def connect() @@ -24,38 +42,97 @@ class TTSock end end - def change_name(name) - if @connected - msg(:mLog, [@name.length, @name, name.length, name].pack("xVa" + @name.length.to_s + "Va" + name.length.to_s)) - @name = name - end - end - def disconnect() if @connected msg(:mDiscon, @name) @socket.close() @connected = false + @queue.add([:mFact, "Disconnected: Please exit now."]) end end - def msg(msgtype, payload) - @socket << [4 + payload.length, TTDefs::MSGS[msgtype], payload].pack("VVA" + payload.length.to_s) + def get_msg() + if (!@queue or @queue.length == 0) + return nil + else + msg = @queue.pop + if (msg[0] == :mConnect) + msg(:mIAm, @name) + @userlist << msg[1] + @userlist.uniq! + @userlist.sort! + end + if (msg[0] == :mIAm) + @userlist << msg[1] + @userlist.uniq! + @userlist.sort! + end + if (msg[0] == :mLog) + oldname = msg[1][5..(5 + msg[1][1..4].unpack("v"))] + newname = msg[1][(5 + msg[1][1..4].unpack("v"))..(msg[1].length)] + @userlist - [oldname] + @userlist << newname + @userlist.uniq! + @userlist.sort! + end + return msg + end end - def start_reader() - @queue = Queue.new - Thread.new() do - while @connected - select([@socket]) - packet = @socket.recv(@socket.recv(4).unpack("V")[0]) - msgtype = packet.unpack("V")[0] - payload = packet.slice(4..packet.length) - @queue << [TTDefs::MSGS.invert[msgtype], payload] - end + def list_users() + msg(:mFact, "Users: " + @userlist.join("; ")) + end + + def name=(name) + if @connected + msg(:mLog, [@name.length, @name, name.length, name].pack("xVa" + @name.length.to_s + "Va" + name.length.to_s)) + @name = name end end - attr_accessor :queue + attr_reader :name, :room +end + +class TTCommander + def initialize(sock) + @sock = sock + end + + def xyzzy_do_cmd(cmdstr) + if (cmdstr[0].chr == "/") + foo = cmdstr.split(/\s*/, 2) + send(foo[0].to_sym, cmdstr[1]) + else + send(:say, cmdstr) + end + end + + def say(str)( + @sock.msg(:mOSay, @sock.name + "(OOC): " + str) + end + + def ic(str) + @sock.msg(:mSay, @sock.name + ": " + str) + end + + def fact(str) + @sock.msg(:mFact, str) + end + + def me(str) + @sock.msg(:mFact, @sock.name + "(OOC) " + str) + end + + def nick(str) + @sock.name = str + end + + def quit(str) + @sock.disconnect() + end + + def names(str) + @sock.list_users + end end \ No newline at end of file -- 2.11.4.GIT