Class: Ucp::Util::UcpServer
- Inherits:
-
Object
- Object
- Ucp::Util::UcpServer
- Defined in:
- lib/ucp/util/ucp_server.rb
Instance Method Summary collapse
-
#initialize(handler, port, host = nil) ⇒ UcpServer
constructor
A new instance of UcpServer.
- #stop ⇒ Object
Constructor Details
#initialize(handler, port, host = nil) ⇒ UcpServer
Returns a new instance of UcpServer.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/ucp/util/ucp_server.rb', line 33 def initialize(handler,port,host=nil) # serv = TCPServer.new(port) # begin # @sock = serv.accept_nonblock # rescue Errno::EAGAIN, Errno::ECONNABORTED, Errno::EPROTO, Errno::EINTR # IO.select([serv]) # retry # end # # sock is an accepted socket. # end @server = host ? TCPServer.open(host, port) : TCPServer.open(port) @server.setsockopt( Socket::SOL_SOCKET, Socket::SO_REUSEADDR, 1 ) port = @server.addr[1] addrs = @server.addr[2..-1].uniq puts "*** listening on #{addrs.collect{|a|"#{a}:#{port}"}.join(' ')}" Thread.start do loop do socket = @server.accept Thread.start do # one thread per client s = socket port = s.peeraddr[1] name = s.peeraddr[2] addr = s.peeraddr[3] #puts "*** recieving from #{name}:#{port}" begin while line = s.gets(3.chr) # read a line at a time raise ClientQuitError if line =~ /^die\r?$/ #puts "#{addr} [#{Time.now}]: #{line}" puts "Srecv: #{line}\n" ucp=UCP.parse_str(line) if ucp.operation.eql?("01") || ucp.operation.eql?("30") || ucp.operation.eql?("51") || ucp.operation.eql?("52") text=UCP.decode_ucp_msg(ucp) #puts "texto_recebido: #{text}\n" account="unknown" smsreq=SmsRequest.new(UCP.decode_ucp_oadc(ucp),ucp.get_field(:adc),text,account,addr,port) smsreq.set_parts_info(ucp., ucp.part_nr, ucp.total_parts) handler.call(smsreq) end reply_ucp=UCP.make_ucp_result(ucp) #puts "bbbbbbbbbbbbb1" reply_ucp.ack("ok") #puts "bbbbbbbbbbbbb2" #puts "reply #{reply_ucp.to_s}" s.print reply_ucp.to_s puts "Ssent: #{reply_ucp.to_s}\n" end rescue ClientQuitError puts "*** #{name}:#{port} disconnected" ensure s.close # close socket on error end puts "*** done with #{name}:#{port}" # end Thread end # end loop end # end Thread accept end # end initialize end |
Instance Method Details
#stop ⇒ Object
116 117 118 |
# File 'lib/ucp/util/ucp_server.rb', line 116 def stop @server.close end |