Merge pull request #19 from asciidisco/feat/list-performance-api-compat
[plugin.video.netflix.git] / service.py
index a45340a35146a550271b9c2bfbbde7cb2193e39b..92a2cda0cf36124d6deae81dd4db09bab5eac971 100644 (file)
@@ -1,12 +1,18 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+# Module: service
+# Created on: 26.01.2017
+
 import threading
 import SocketServer
 import threading
 import SocketServer
-import xbmc
 import socket
 import socket
+from xbmc import Monitor
 from xbmcaddon import Addon
 from resources.lib.KodiHelper import KodiHelper
 from resources.lib.MSLHttpRequestHandler import MSLHttpRequestHandler
 from resources.lib.NetflixHttpRequestHandler import NetflixHttpRequestHandler
 
 from xbmcaddon import Addon
 from resources.lib.KodiHelper import KodiHelper
 from resources.lib.MSLHttpRequestHandler import MSLHttpRequestHandler
 from resources.lib.NetflixHttpRequestHandler import NetflixHttpRequestHandler
 
+# helper function to select an unused port on the host machine
 def select_unused_port():
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.bind(('localhost', 0))
 def select_unused_port():
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.bind(('localhost', 0))
@@ -17,45 +23,56 @@ def select_unused_port():
 addon = Addon()
 kodi_helper = KodiHelper()
 
 addon = Addon()
 kodi_helper = KodiHelper()
 
-port = select_unused_port()
-addon.setSetting('msl_service_port', str(port))
-kodi_helper.log(msg='Picked Port: ' + str(port))
+# pick & store a port for the MSL service
+msl_port = select_unused_port()
+addon.setSetting('msl_service_port', str(msl_port))
+kodi_helper.log(msg='[MSL] Picked Port: ' + str(msl_port))
+
+# pick & store a port for the internal Netflix HTTP proxy service
+ns_port = select_unused_port()
+addon.setSetting('netflix_service_port', str(ns_port))
+kodi_helper.log(msg='[NS] Picked Port: ' + str(ns_port))
 
 # server defaults
 SocketServer.TCPServer.allow_reuse_address = True
 
 # configure the MSL Server
 
 # server defaults
 SocketServer.TCPServer.allow_reuse_address = True
 
 # configure the MSL Server
-msl_server = SocketServer.TCPServer(('127.0.0.1', port), MSLHttpRequestHandler)
+msl_server = SocketServer.TCPServer(('127.0.0.1', msl_port), MSLHttpRequestHandler)
 msl_server.server_activate()
 msl_server.timeout = 1
 
 # configure the Netflix Data Server
 msl_server.server_activate()
 msl_server.timeout = 1
 
 # configure the Netflix Data Server
-nd_server = SocketServer.TCPServer(('127.0.0.1', 7005), NetflixHttpRequestHandler)
+nd_server = SocketServer.TCPServer(('127.0.0.1', ns_port), NetflixHttpRequestHandler)
 nd_server.server_activate()
 nd_server.timeout = 1
 
 if __name__ == '__main__':
 nd_server.server_activate()
 nd_server.timeout = 1
 
 if __name__ == '__main__':
-    monitor = xbmc.Monitor()
+    monitor = Monitor()
 
 
+    # start thread for MLS servie
     msl_thread = threading.Thread(target=msl_server.serve_forever)
     msl_thread.daemon = True
     msl_thread.start()
 
     msl_thread = threading.Thread(target=msl_server.serve_forever)
     msl_thread.daemon = True
     msl_thread.start()
 
+    # start thread for Netflix HTTP service
     nd_thread = threading.Thread(target=nd_server.serve_forever)
     nd_thread.daemon = True
     nd_thread.start()
 
     nd_thread = threading.Thread(target=nd_server.serve_forever)
     nd_thread.daemon = True
     nd_thread.start()
 
+    # kill the services if kodi monitor tells us to
     while not monitor.abortRequested():
         if monitor.waitForAbort(5):
             msl_server.shutdown()
             nd_server.shutdown()
             break
 
     while not monitor.abortRequested():
         if monitor.waitForAbort(5):
             msl_server.shutdown()
             nd_server.shutdown()
             break
 
+    # MSL service shutdown sequence
     msl_server.server_close()
     msl_server.socket.close()
     msl_server.shutdown()
     kodi_helper.log(msg='Stopped MSL Service')
 
     msl_server.server_close()
     msl_server.socket.close()
     msl_server.shutdown()
     kodi_helper.log(msg='Stopped MSL Service')
 
+    # Netflix service shutdown sequence
     nd_server.server_close()
     nd_server.socket.close()
     nd_server.shutdown()
     nd_server.server_close()
     nd_server.socket.close()
     nd_server.shutdown()