diff options
Diffstat (limited to 'testcode/messages.rb')
-rw-r--r-- | testcode/messages.rb | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/testcode/messages.rb b/testcode/messages.rb new file mode 100644 index 0000000..1521ae6 --- /dev/null +++ b/testcode/messages.rb @@ -0,0 +1,152 @@ +#!/usr/local/bin/ruby +# messages.rb - this is a test for the Ruby SLOC counter. +# You should get 110 SLOC for this file. + +# Guru module: private messages among players +# Copyright (C) 2001, 2002 Josef Spillner, dr_maux@user.sourceforge.net +# This is used as a test case in SLOCCount, a toolsuite that counts +# source lines of code (SLOC). +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# To contact David A. Wheeler, see his website at: +# http://www.dwheeler.com. +# +# + +# Commands: +# guru do i have any messages +# guru tell grubby nice to meet myself :) +# guru alert grubby + +databasedir = ENV['HOME'] + "/.ggz/grubby" + +#################################################################################### + +class GuruMessages + def initialize + @msg = Array.new + @alerts = Array.new + end + def add(fromplayer, player, message) + @entry = Array.new + newmessage = (fromplayer + " said: " + message.join(" ")).split(" ") + @entry << player << newmessage + @msg.push(@entry) + print "OK, I make sure he gets the message." + $stdout.flush + sleep 1 + end + def tell(player) + len = @msg.length + a = 0 + for i in 0..len + unless @msg[len-i] == nil + print @msg[len-i][1][0..@msg[len-i][1].length - 1].join(" ") + "\n" if player == @msg[len-i][0] + if player == @msg[len-i][0] + @msg.delete_at(len-i) + a = 1 + end + end + end + if a == 0 + print "Sorry " + player + ", I guess you're not important enough to get any messages." + end + $stdout.flush + sleep 1 + end + def alert(fromplayer, player) + @entry = Array.new << fromplayer << player + @alerts.push(@entry) + print "OK, I alert " + player + " when I see him." + $stdout.flush + sleep 1 + end + def trigger(player) + len = @alerts.length + a = 0 + for i in 0..len + unless @alerts[len-i] == nil + if player == @alerts[len-i][0] + print player + ": ALERT from " + @alerts[len-i][1] + "\n" + @alerts.delete_at(len-i) + a = 1 + end + end + end + if a == 1 + $stdout.flush + sleep 1 + return 1 + end + return 0 + end +end + +input = $stdin.gets.chomp.split(/\ /) + +mode = 0 +if (input[1] == "do") && (input[2] == "i") && (input[3] == "have") && + (input[4] == "any") && (input[5] == "messages") + mode = 1 + player = ARGV[0] +end +if (input[1] == "tell") + mode = 2 + fromplayer = ARGV[0] + player = input[2] + message = input[3..input.length] +end +if(input[1] == "alert") + mode = 3 + fromplayer = ARGV[0] + player = input[2] +end + +m = nil +begin + File.open(databasedir + "/messages") do |f| + m = Marshal.load(f) + end +rescue + m = GuruMessages.new +end + +if mode == 0 + ret = m.trigger ARGV[0] + if ret == 0 + exit + end +end +if mode == 1 + if player != nil + m.tell player + else + print "If you mind telling me who you are?" + $stdout.flush + sleep 1 + end +end +if mode == 2 + m.add fromplayer, player, message +end +if mode == 3 + m.alert fromplayer, player +end + +File.open(databasedir + "/messages", "w+") do |f| + Marshal.dump(m, f) +end + |