chore(performance): Removes NetflixSession from the core addon & adds a HTTP proxy...
[plugin.video.netflix.git] / service.py
1 import threading
2 import SocketServer
3 import xbmc
4 import socket
5 from xbmcaddon import Addon
6 from resources.lib.KodiHelper import KodiHelper
7 from resources.lib.MSLHttpRequestHandler import MSLHttpRequestHandler
8 from resources.lib.NetflixHttpRequestHandler import NetflixHttpRequestHandler
9
10 def select_unused_port():
11     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
12     sock.bind(('localhost', 0))
13     addr, port = sock.getsockname()
14     sock.close()
15     return port
16
17 addon = Addon()
18 kodi_helper = KodiHelper()
19
20 port = select_unused_port()
21 addon.setSetting('msl_service_port', str(port))
22 kodi_helper.log(msg='Picked Port: ' + str(port))
23
24 # server defaults
25 SocketServer.TCPServer.allow_reuse_address = True
26
27 # configure the MSL Server
28 msl_server = SocketServer.TCPServer(('127.0.0.1', port), MSLHttpRequestHandler)
29 msl_server.server_activate()
30 msl_server.timeout = 1
31
32 # configure the Netflix Data Server
33 nd_server = SocketServer.TCPServer(('127.0.0.1', 7005), NetflixHttpRequestHandler)
34 nd_server.server_activate()
35 nd_server.timeout = 1
36
37 if __name__ == '__main__':
38     monitor = xbmc.Monitor()
39
40     msl_thread = threading.Thread(target=msl_server.serve_forever)
41     msl_thread.daemon = True
42     msl_thread.start()
43
44     nd_thread = threading.Thread(target=nd_server.serve_forever)
45     nd_thread.daemon = True
46     nd_thread.start()
47
48     while not monitor.abortRequested():
49         if monitor.waitForAbort(5):
50             msl_server.shutdown()
51             nd_server.shutdown()
52             break
53
54     msl_server.server_close()
55     msl_server.socket.close()
56     msl_server.shutdown()
57     kodi_helper.log(msg='Stopped MSL Service')
58
59     nd_server.server_close()
60     nd_server.socket.close()
61     nd_server.shutdown()
62     kodi_helper.log(msg='Stopped HTTP Service')