-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathclipserver.py
executable file
·64 lines (57 loc) · 1.67 KB
/
clipserver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
import sys
import socket
import platform
import json
import pyperclip as clip
import rc4
from daemon import Daemon
import config
message_stack = []
def process_message(msg):
global message_stack
try:
msg = json.loads(msg)
except:
return None
if msg.get('username') != config.username or msg.get('node') == platform.node():
return None
if msg.get('first'):
message_stack = []
message_stack.append(msg)
if msg.get('last'):
message_stack.sort(key=lambda x: x.get('order'))
message = ''
for m in message_stack:
message += m['msg']
message = rc4.decrypt(message, config.password)
message_stack = []
return message
return None
def main():
my_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
my_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
my_socket.bind(('', config.port))
print 'start service ...'
while True:
message, address = my_socket.recvfrom(8192)
message = process_message(message)
if message:
print 'message (%s ...) from : %s' % (message[:50], address[0])
clip.copy(message)
class ClipDaemon(Daemon):
def run(self):
main()
if __name__ == "__main__" :
if len(sys.argv) == 1:
main()
else:
action = sys.argv[1]
clip_daemon = ClipDaemon('/tmp/clipcast.pid')
if action == 'start':
clip_daemon.start()
elif action == 'stop':
clip_daemon.stop()
elif action == 'restart':
clip_daemon.restart()