Class: Ucp::Util::UcpServer

Inherits:
Object
  • Object
show all
Defined in:
lib/ucp/util/ucp_server.rb

Instance Method Summary collapse

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"
              ="unknown"
              smsreq=SmsRequest.new(UCP.decode_ucp_oadc(ucp),ucp.get_field(:adc),text,,addr,port)
              smsreq.set_parts_info(ucp.message_ref, 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

#stopObject



116
117
118
# File 'lib/ucp/util/ucp_server.rb', line 116

def stop
  @server.close
end