Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
epsylon
GitHub Repository: epsylon/ufonet
Path: blob/master/core/tools/grider.py
1207 views
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-"
3
"""
4
This file is part of the UFONet project, https://ufonet.03c8.net
5
6
Copyright (c) 2013/2020 | psy <[email protected]>
7
8
You should have received a copy of the GNU General Public License along
9
with UFONet; if not, write to the Free Software Foundation, Inc., 51
10
Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
11
"""
12
import socket, re, time, string, sys, os, traceback
13
from threading import *
14
15
class Paster(Thread):
16
def __init__(self, parent):
17
Thread.__init__(self)
18
self.parent = parent
19
self.active = False
20
self.sock = None
21
self.clean = False
22
23
def run( self ):
24
conn = None
25
addr = None
26
self.sock = self.parent.try_bind(9992)
27
if self.sock is not None:
28
self.sock.listen(1)
29
print('[Info] [AI] Clean on port 9992')
30
self.clean = True
31
else:
32
print('[Error] [AI] No paste on port 9992')
33
while self.clean:
34
try:
35
conn,addr = self.sock.accept()
36
print('[Info] [AI] Got copy from', addr)
37
try:
38
data = conn.recv(4096).decode("utf-8")
39
except:
40
data = None
41
pass
42
print ("[Info] [AI] Stream received:", repr(data))
43
except socket.timeout:
44
print("[Info] [AI] Socket listening...")
45
pass
46
except socket.error as e:
47
if self.clean == False:
48
print("[Error] [AI] Socket Error /return : "+str(e))
49
return
50
else:
51
print("[Error] [AI] Socket Error /break : "+str(e))
52
break
53
else:
54
if data:
55
l=len(data)
56
print("[Info] [AI] Received data...\n")
57
if data.find('\n')==-1 and data.find('\r')==-1:
58
if data.find("#?#")!=-1:
59
print("[Info] [AI] Adding to grid")
60
fc=open(self.parent.target_dir+"grid.txt","a")
61
fc.write(data+"\n")
62
fc.close()
63
elif data.find("#!#")!=-1:
64
print("[Info] [AI] Adding to board")
65
fc=open(self.parent.target_dir+"board.txt","a")
66
fc.write(data+"\n")
67
fc.close()
68
elif data.find("#-#")!=-1:
69
print("[Info] [AI] Adding to wargames")
70
fc=open(self.parent.target_dir+"wargames.txt","a")
71
fc.write(data+"\n")
72
fc.close()
73
elif data.find("#L#")!=-1:
74
print("[Info] [AI] Adding to links")
75
fc=open(self.parent.target_dir+"links.txt","a")
76
fc.write(data+"\n")
77
fc.close()
78
elif data.find("#S#")!=-1:
79
print("[Info] [AI] Adding to streams")
80
fc=open(self.parent.target_dir+"streams.txt","a")
81
fc.write(data+"\n")
82
fc.close()
83
elif data.find("#$#")!=-1:
84
print("[Info] [AI] Adding to globalnet")
85
fc=open(self.parent.target_dir+"globalnet.txt","a")
86
fc.write(data+"\n")
87
fc.close()
88
else:
89
print("[Error] [AI] Unknown data...")
90
conn.close()
91
print('[Info] [AI] Done!!!')
92
self.sock.close()
93
94
class Grider ( Thread ):
95
def __init__(self):
96
Thread.__init__( self )
97
self.daemon = True
98
self.awake = True
99
self.tmp_dir = "/tmp/"
100
self.target_dir = '/var/www/ufonet/'
101
self.blackray = None
102
self.absorber = None
103
self.computer = None
104
105
def dream(self):
106
if not os.path.exists(self.target_dir+"grid.txt"):
107
grid_fail = 0
108
try:
109
fc = open(self.target_dir+'grid.txt', 'wb')
110
fc.close()
111
except:
112
print("[Error] [AI] No 'grid.txt' file in "+self.target_dir)
113
grid_fail = grid_fail + 1
114
else:
115
grid_fail = 0
116
if not os.path.exists(self.target_dir+"board.txt"):
117
board_fail = 0
118
try:
119
fc = open(self.target_dir+'board.txt', 'wb')
120
fc.close()
121
except:
122
print("[Error] [AI] No 'board.txt' file in "+self.target_dir)
123
board_fail = board_fail + 1
124
else:
125
board_fail = 0
126
if not os.path.exists(self.target_dir+"wargames.txt"):
127
wargames_fail = 0
128
try:
129
fc = open(self.target_dir+'wargames.txt', 'wb')
130
fc.close()
131
except:
132
print("[Error] [AI] No 'wargames.txt' file in "+self.target_dir)
133
wargames_fail = wargames_fail + 1
134
else:
135
wargames_fail = 0
136
if not os.path.exists(self.target_dir+"links.txt"):
137
links_fail = 0
138
try:
139
fc = open(self.target_dir+'links.txt', 'wb')
140
fc.close()
141
except:
142
print("[Error] [AI] No 'links.txt' file in "+self.target_dir)
143
links_fail = links_fail + 1
144
else:
145
links_fail = 0
146
if not os.path.exists(self.target_dir+"streams.txt"):
147
streams_fail = 0
148
try:
149
fc = open(self.target_dir+'streams.txt', 'wb')
150
fc.close()
151
except:
152
print("[Error] [AI] No 'streams.txt' file in "+self.target_dir)
153
streams_fail = streams_fail + 1
154
else:
155
streams_fail = 0
156
if not os.path.exists(self.target_dir+"globalnet.txt"):
157
globalnet_fail = 0
158
try:
159
fc = open(self.target_dir+'globalnet.txt', 'wb')
160
fc.close()
161
except:
162
print("[Error] [AI] No 'globalnet.txt' file in "+self.target_dir)
163
globalnet_fail = globalnet_fail + 1
164
else:
165
globalnet_fail = 0
166
if not os.access(self.target_dir+"grid.txt",os.W_OK):
167
print("[Error] [AI] Write access denied for grid file in "+self.target_dir)
168
grid_fail = grid_fail + 1
169
if not os.access(self.target_dir+"board.txt",os.W_OK):
170
print("[Error] [AI] Write access denied for board file in "+self.target_dir)
171
board_fail = board_fail + 1
172
if not os.access(self.target_dir+"wargames.txt",os.W_OK):
173
print("[Error] [AI] Write access denied for wargames file in "+self.target_dir)
174
wargames_fail = wargames_fail + 1
175
if not os.access(self.target_dir+"links.txt",os.W_OK):
176
print("[Error] [AI] Write access denied for links file in "+self.target_dir)
177
links_fail = links_fail + 1
178
if not os.access(self.target_dir+"streams.txt",os.W_OK):
179
print("[Error] [AI] Write access denied for streams file in "+self.target_dir)
180
streams_fail = streams_fail + 1
181
if not os.access(self.target_dir+"globalnet.txt",os.W_OK):
182
print("[Error] [AI] Write access denied for globalnet file in "+self.target_dir)
183
globalnet_fail = globalnet_fail + 1
184
if grid_fail > 0 and board_fail > 0 and wargames_fail > 0 and links_fail > 0 and streams_fail > 0 and globalnet_fail > 0:
185
print("\n[Error] [AI] 'Grid', 'board', 'wargames', 'links', 'streams' and 'globalnet' are unuseable... -> [Aborting!]")
186
print("\n[Info] [AI] Suspend [Grider] with: Ctrl+z")
187
sys.exit(2)
188
self.paster = Paster(self)
189
self.awake = False
190
print("[Info] [AI] [Grider] Having sweet dreams...")
191
192
def try_bind(self, port):
193
s=None
194
try:
195
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
196
s.settimeout(30)
197
s.bind(('', port))
198
except socket.error as e:
199
if e.errno == 98: # if is in use wait a bit and retry
200
time.sleep(3)
201
return self.try_bind(port)
202
print("[Error] [AI] [Grider] Socket busy, connection failed on port " + str(port))
203
return s
204
205
def run(self):
206
self.dream()
207
try:
208
self.paster.start()
209
if self.paster.clean:
210
print("[Info] [AI] [Grider] Advancing time in another space (waiting for server)"+os.linesep)
211
time.sleep(1)
212
while self.paster.clean:
213
print("[Info] [AI] [Grider] Advancing time in another space (waiting for server)"+os.linesep)
214
time.sleep(1)
215
print("\n[Info] [AI] [Grider] Sheets are all up and ready...")
216
while self.paster.clean:
217
time.sleep(1)
218
except:
219
traceback.print_exc()
220
self.cut()
221
print("[Info] [AI] [Grider] Finished!!!")
222
223
def cut(self):
224
self.paster.clean=False
225
self.paster.join()
226
227
if __name__ == "__main__":
228
try:
229
print("\n[Info] [AI] Initiating copy/paste functions ...\n")
230
print('='*22 + '\n')
231
app = Grider()
232
app.start()
233
while True: time.sleep(1)
234
except KeyboardInterrupt:
235
print("\n[Info] [AI] Terminating copy/paste functions...\n")
236
app.cut()
237
except Exception as e:
238
traceback.print_exc()
239
print ("\n[Error] [AI] Something wrong trying to copy/paste to the 'grid'... -> [Passing!]\n")
240
241