Ignore beeps. Notifications are handled internally.
[kaya.git] / lib / ics / connection.rb
blob66f1a80c94bf31ebd5200d1775add6a965612170
1 require 'qtutils'
3 module ICS
5
6 # A connection to an ICS server
7
8 class Connection < Qt::Object
9   attr_accessor :debug
11   signal_map(:hostFound => nil,
12              :established => nil,
13              :received_line => 'receivedLine(QString)',
14              :received_text => 'receivedText(QString)')
16   def initialize(host, port)
17     super nil
19     @create_socket = lambda do 
20       puts "connecting to #{host}:#{port}"
21       s = Qt::TcpSocket.new(self)
22       connect(s, SIGNAL(:hostFound), self, SIGNAL(:hostFound))
23       s.connect(s, SIGNAL(:connected), self, SIGNAL(:established))
24       s.on(:readyRead) { process_line }
25       s.connect_to_host(host, port)
26       s
27     end
28   end
30   def process_line
31     unless @socket
32       puts "no socket!"
33       return
34     end
35     
36     while @socket.can_read_line
37       line = @socket.read_line.to_s
38       line = @buffer + line.gsub("\r", '')
39       line.chomp!
40       emit receivedLine(line)
41       @buffer = ''
42     end
44     if (size = @socket.bytes_available) > 0
45       data = @socket.read_all
46       @buffer += data.to_s.gsub("\r", '')
47       emit receivedText(@buffer)
48     end
49     
50   end
52   def start
53     @socket = @create_socket.call
54     @connected = true
55     @buffer = ''
56   end
58   def stop
59   end
61   def send_text(text)
62     puts "> #{text}" if @debug
63     unless @connected
64       @unsent_text += @text + "\n"
65       return
66     end
67     
68     unless @socket
69       puts "no socket!"
70       return
71     end
72     
73     process_line
74     os = Qt::TextStream.new(@socket)
75     os << text << "\n"
76     os.flush
77   end
78 end
80 end