2018-04-06 01:44:15 +02:00
from PyQt5 import QtWidgets , QtGui
2018-04-05 12:01:33 +02:00
import sys
import os
import time
import signal
2018-04-05 16:27:48 +02:00
import argparse
2018-04-06 18:00:10 +02:00
from concurrent import futures
2018-04-05 12:01:33 +02:00
path = os . path . abspath ( os . path . dirname ( __file__ ) )
sys . path . append ( path )
2018-04-05 16:37:51 +02:00
sys . path . append ( path + " /../proto/ " )
2018-04-05 12:01:33 +02:00
import grpc
import ui_pb2
import ui_pb2_grpc
2018-04-06 01:44:15 +02:00
from service import UIService
from version import version
2018-04-05 12:01:33 +02:00
2018-04-06 01:44:15 +02:00
def on_exit ( ) :
app . quit ( )
server . stop ( 0 )
sys . exit ( 0 )
2018-04-05 12:01:33 +02:00
if __name__ == ' __main__ ' :
2018-04-05 16:27:48 +02:00
parser = argparse . ArgumentParser ( description = ' OpenSnitch UI service. ' )
2018-04-07 01:52:43 +02:00
parser . add_argument ( " --socket " , dest = " socket " , default = " unix:///tmp/osui.sock " , help = " Path of the unix socket for the gRPC service (https://github.com/grpc/grpc/blob/master/doc/naming.md). " , metavar = " FILE " )
2018-04-05 16:27:48 +02:00
args = parser . parse_args ( )
2018-04-06 18:44:18 +02:00
2018-04-05 12:01:33 +02:00
app = QtWidgets . QApplication ( sys . argv )
2018-04-06 01:44:15 +02:00
2018-04-06 15:39:40 +02:00
service = UIService ( app , on_exit )
2018-04-05 16:27:48 +02:00
server = grpc . server ( futures . ThreadPoolExecutor ( max_workers = 4 ) )
2018-04-05 12:01:33 +02:00
2018-04-06 15:39:40 +02:00
ui_pb2_grpc . add_UIServicer_to_server ( service , server )
2018-04-05 12:01:33 +02:00
2018-04-07 01:52:43 +02:00
if args . socket . startswith ( " unix:// " ) :
socket = args . socket [ 7 : ]
socket = os . path . abspath ( socket )
server . add_insecure_port ( " unix: %s " % socket )
else :
server . add_insecure_port ( args . socket )
2018-04-05 12:01:33 +02:00
# https://stackoverflow.com/questions/5160577/ctrl-c-doesnt-work-with-pyqt
signal . signal ( signal . SIGINT , signal . SIG_DFL )
try :
2018-04-06 01:44:15 +02:00
# print "OpenSnitch UI service running on %s ..." % socket
2018-04-05 12:01:33 +02:00
server . start ( )
app . exec_ ( )
except KeyboardInterrupt :
2018-04-06 01:44:15 +02:00
on_exit ( )
2018-04-05 12:01:33 +02:00