dejsem.1.5/python/dejsem.pycharm/main.py
changeset 0 676905a3b03c
equal deleted inserted replaced
-1:000000000000 0:676905a3b03c
       
     1 #!/usr/bin/python3
       
     2 # coding=utf8
       
     3 
       
     4 # hal.hh.cz
       
     5 #	/usr/local/bin/dejsem.py
       
     6 #	/usr/local/dejsem/ssl
       
     7 #
       
     8 # FVWM shotcuts	Ctrl-Alt-B	Ctrl-Alt-C	Ctrl-Alt-V
       
     9 # Key B	   A   CM  Exec ACT=PUSHCLIP CHAN=N dejsem.py	 # copy local  --> shared clipboard
       
    10 # Key C	   A   CM  Exec ACT=PUSHCLIP CHAN=N dejsem.py	 # copy local  --> shared clipboard
       
    11 # Key V	   A   CM  Exec ACT=PULLCLIP CHAN=N dejsem.py	 # copy shared --> local  clipboard
       
    12 #
       
    13 # server side
       
    14 #	● akceptuje cmd-connection na základním portu kanálu a přijímá z ní příkazy
       
    15 #	● po provedení příkazu
       
    16 #		PULLCLIP
       
    17 #		PULLHIST
       
    18 #		PUSHCLIP
       
    19 #		GETPEER
       
    20 #		SETPEER
       
    21 #		EXPOSE
       
    22 #		EXPOSEUP
       
    23 #		FREE
       
    24 #		LONGTASK 
       
    25 #	  se connection uzavře
       
    26 #	● po provedení příkazu
       
    27 #		PULLFILE
       
    28 #		PUSHFILE
       
    29 #		PULLLIST
       
    30 #		MOVE
       
    31 #		DELETE
       
    32 #		CREATDIR
       
    33 #		RECKON
       
    34 #	  zůstává connection otevřená a pokračuje čtením dalšího příkazu, protože tyto příkazy mohou být dávkové
       
    35 # timeouts
       
    36 #	conn_TO				connection retry wait TO - wait before next connect try (try <connThreshold> times)
       
    37 #	block_TO			blocking net operations TO
       
    38 #	long_run_accept_TO	accept TO on ports binded dynamicaly for long duration operations
       
    39 #	peer_accept_TO		accept TO waiting for connection from peer when receiving peer files (PULLPEER)
       
    40 
       
    41 import sys, os, random, time, signal
       
    42 
       
    43 def stop(sign, frame):
       
    44 	for pid in pids:
       
    45 		os.kill(pid, signal.SIGTERM)
       
    46 
       
    47 pids = set()	# seznam subthreads pro účely mimořádného ukončení
       
    48 
       
    49 if __name__ == '__main__':
       
    50 	from parms import Parms
       
    51 	Parms.setup()
       
    52 	random.seed(Parms.random_seed) if Parms.random_seed else random.seed()
       
    53 
       
    54 	from d import D
       
    55 	D.t0 = time.time()
       
    56 	d = D(Parms.applName)
       
    57 	d.log("{}, ver. {:.2f}".format(sys.argv[0], Parms.version), sev=1)
       
    58 
       
    59 	if Parms.action == 'SRV':
       
    60 		from server import Server
       
    61 		pid = os.fork()
       
    62 		if not pid:		# child
       
    63 			from meter import Meter
       
    64 			Meter(d).run()
       
    65 			sys.exit(0)
       
    66 		else:			# parent
       
    67 			pids.add(pid)
       
    68 			d.log("Meter spawned in process {}".format(pid), sev=1)
       
    69 		for chan in range(1, 99):
       
    70 			if "{:02d}".format(chan) in os.listdir(Parms.srv_homedir):
       
    71 				pid = os.fork()
       
    72 				if not pid:		# child
       
    73 					Server(d, chan)
       
    74 					sys.exit(0)
       
    75 				else:			# parent
       
    76 					pids.add(pid)
       
    77 					d.log("server node SSL {:02d} started in process {}".format(chan, pid), sev=4)
       
    78 		d.log("all server nodes spawned", sev=1)
       
    79 		signal.signal(signal.SIGINT, stop)
       
    80 		signal.signal(signal.SIGTERM, stop)
       
    81 		signal.pthread_sigmask(signal.SIG_UNBLOCK, {signal.SIGINT, signal.SIGTERM})
       
    82 		signal.pause()
       
    83 		d.log("KeyboardInterrupt")
       
    84 	else:
       
    85 		from client import Client
       
    86 		Client(d)