dejsem.1.5/python/dejsem.pycharm/main.py
changeset 0 676905a3b03c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dejsem.1.5/python/dejsem.pycharm/main.py	Wed Nov 27 09:50:16 2019 +0100
@@ -0,0 +1,86 @@
+#!/usr/bin/python3
+# coding=utf8
+
+# hal.hh.cz
+#	/usr/local/bin/dejsem.py
+#	/usr/local/dejsem/ssl
+#
+# FVWM shotcuts	Ctrl-Alt-B	Ctrl-Alt-C	Ctrl-Alt-V
+# Key B	   A   CM  Exec ACT=PUSHCLIP CHAN=N dejsem.py	 # copy local  --> shared clipboard
+# Key C	   A   CM  Exec ACT=PUSHCLIP CHAN=N dejsem.py	 # copy local  --> shared clipboard
+# Key V	   A   CM  Exec ACT=PULLCLIP CHAN=N dejsem.py	 # copy shared --> local  clipboard
+#
+# server side
+#	● akceptuje cmd-connection na základním portu kanálu a přijímá z ní příkazy
+#	● po provedení příkazu
+#		PULLCLIP
+#		PULLHIST
+#		PUSHCLIP
+#		GETPEER
+#		SETPEER
+#		EXPOSE
+#		EXPOSEUP
+#		FREE
+#		LONGTASK 
+#	  se connection uzavře
+#	● po provedení příkazu
+#		PULLFILE
+#		PUSHFILE
+#		PULLLIST
+#		MOVE
+#		DELETE
+#		CREATDIR
+#		RECKON
+#	  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é
+# timeouts
+#	conn_TO				connection retry wait TO - wait before next connect try (try <connThreshold> times)
+#	block_TO			blocking net operations TO
+#	long_run_accept_TO	accept TO on ports binded dynamicaly for long duration operations
+#	peer_accept_TO		accept TO waiting for connection from peer when receiving peer files (PULLPEER)
+
+import sys, os, random, time, signal
+
+def stop(sign, frame):
+	for pid in pids:
+		os.kill(pid, signal.SIGTERM)
+
+pids = set()	# seznam subthreads pro účely mimořádného ukončení
+
+if __name__ == '__main__':
+	from parms import Parms
+	Parms.setup()
+	random.seed(Parms.random_seed) if Parms.random_seed else random.seed()
+
+	from d import D
+	D.t0 = time.time()
+	d = D(Parms.applName)
+	d.log("{}, ver. {:.2f}".format(sys.argv[0], Parms.version), sev=1)
+
+	if Parms.action == 'SRV':
+		from server import Server
+		pid = os.fork()
+		if not pid:		# child
+			from meter import Meter
+			Meter(d).run()
+			sys.exit(0)
+		else:			# parent
+			pids.add(pid)
+			d.log("Meter spawned in process {}".format(pid), sev=1)
+		for chan in range(1, 99):
+			if "{:02d}".format(chan) in os.listdir(Parms.srv_homedir):
+				pid = os.fork()
+				if not pid:		# child
+					Server(d, chan)
+					sys.exit(0)
+				else:			# parent
+					pids.add(pid)
+					d.log("server node SSL {:02d} started in process {}".format(chan, pid), sev=4)
+		d.log("all server nodes spawned", sev=1)
+		signal.signal(signal.SIGINT, stop)
+		signal.signal(signal.SIGTERM, stop)
+		signal.pthread_sigmask(signal.SIG_UNBLOCK, {signal.SIGINT, signal.SIGTERM})
+		signal.pause()
+		d.log("KeyboardInterrupt")
+	else:
+		from client import Client
+		Client(d)
\ No newline at end of file