def start(self):
"""start method is where we decide to :
* catch term signal
* run as daemon
* start the http server
* connect to Freeswitch via our Inbound Socket interface
* wait even if it takes forever, ever, ever, evveeerrr...
"""
self.log.info("RESTServer starting ...")
# catch SIG_TERM
gevent.signal(signal.SIGTERM, self.sig_term)
gevent.signal(signal.SIGHUP, self.sig_hup)
# run
self._run = True
if self._daemon:
self.do_daemon()
# connection counter
retries = 1
# start http server
self.http_proc = gevent.spawn(self.http_server.serve_forever)
if self._ssl:
self.log.info("RESTServer started at: 'https://%s'" % self.http_address)
else:
self.log.info("RESTServer started at: 'http://%s'" % self.http_address)
# Start inbound socket
try:
while self._run:
try:
self.log.info("Trying to connect to FreeSWITCH at: %s" \
% self.fs_inbound_address)
self._rest_inbound_socket.connect()
# reset retries when connection is a success
retries = 1
self.log.info("Connected to FreeSWITCH")
# serve forever
self._rest_inbound_socket.serve_forever()
except ConnectError, e:
if self._run is False:
break
self.log.error("Connect failed: %s" % str(e))
# sleep after connection failure
sleep_for = retries * 10
self.log.error("Reconnecting in %d seconds" % sleep_for)
gevent.sleep(sleep_for)
# don't sleep more than 30 secs
if retries < 3:
retries += 1
except (SystemExit, KeyboardInterrupt):
pass
# kill http server
self.http_proc.kill()
# finish here
self.log.info("RESTServer Exited")
评论列表
文章目录