except ImportError:
pass
+import uuid
+from apscheduler.schedulers.background import BackgroundScheduler
class HTTPHandler(BaseHTTPServer.BaseHTTPRequestHandler):
try:
while True:
-
+
if not self.clientconnected:
logger.debug("Client is not connected, terminating")
break
+ VPStuff.vlcclient.mark(self.vlcid)
data = self.video.read(4096)
if data and self.clientconnected:
self.wfile.write(data)
self.handleRequest(headers_only)
def handleRequest(self, headers_only):
+
+ self.unic = uuid.uuid4()
# Limit concurrent connections
if 0 < VPConfig.maxconns <= VPStuff.clientcounter.total:
self.params.append('0')
# Adding client to clientcounter
- clients = VPStuff.clientcounter.add(self.reqtype+'\\'+self.path_unquoted, self.clientip)
+ clients = VPStuff.clientcounter.add(self.reqtype+'\\'+self.path_unquoted, self.clientip, self.unic)
# If we are the one client, but sucessfully got vp instance from clientcounter,
# then somebody is waiting in the videodestroydelay state
# End headers. Next goes video data
self.end_headers()
logger.debug("Headers sent")
+ self.headerssent = True
# Run proxyReadWrite
self.proxyReadWrite()
finally:
logger.debug("END REQUEST")
logger.info("Closed connection from " + self.clientip + " path " + self.path)
- VPStuff.clientcounter.delete(self.reqtype+'\\'+self.path_unquoted, self.clientip)
- if not VPStuff.clientcounter.get(self.reqtype+'\\'+self.path_unquoted):
- try:
- logger.debug("That was the last client, destroying VPClient")
- logger.info("Stopping broadcasting " + self.path)
- VPStuff.vlcclient.stopBroadcast(self.vlcid)
- except:
- pass
- self.vp.destroy()
- if not self.headerssent:
- logger.error("Problem receiving video stream, no headers!")
- if VPStuff.clientcounter.total == 0:
- logger.error("Probably VLC hang")
- VPStuff.vlc.kill()
+ VPStuff.clientcounter.delete(self.reqtype+'\\'+self.path_unquoted, self.clientip, self.unic)
+# if not VPStuff.clientcounter.get(self.reqtype+'\\'+self.path_unquoted):
+# try:
+# logger.debug("That was the last client, destroying VPClient")
+# logger.info("Stopping broadcasting " + self.path)
+# VPStuff.vlcclient.stopBroadcast(self.vlcid)
+# except vlcclient.VlcException:
+# logger.error("VLC connection problem, %s client(s)!" % VPStuff.clientcounter.total)
+# if VPStuff.clientcounter.total == 0:
+# logger.error("Probably VLC hang")
+# VPStuff.vlc.kill()
+# except:
+# pass
+ self.vp.destroy()
class HTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
from vpconfig import VPConfig
logger.info('Config reloaded')
+sched = BackgroundScheduler()
+sched.start()
+
+def clean_streams():
+ VPStuff.vlcclient.clean_streams(15)
+
+job = sched.add_job(clean_streams, 'interval', seconds=15)
+
# setting signal handlers
try:
gevent.signal(signal.SIGHUP, _reloadconfig)
try:
logger.info("Using gevent %s" % gevent.__version__)
- logger.info("Using psutil %s" % psutil.__version__)
+ logger.info("Usig psutil %s" % psutil.__version__)
logger.info("Using VLC %s" % VPStuff.vlcclient._vlcver)
logger.info("Server started.")
while True: