Browse Source

Merge pull request #2 from rscmbbng/unthread-buildindex

Unthread buildindex
pull/3/head
jngrt 10 years ago
parent
commit
df281b3fa9
  1. 63
      main.py
  2. 41
      meshenger_clientserve.py
  3. 7
      meshenger_nodeserve.py
  4. 2
      webapp.html

63
main.py

@ -27,6 +27,8 @@ class Meshenger:
os.mkdir(self.msg_dir) os.mkdir(self.msg_dir)
logger.info('Making message directory') logger.info('Making message directory')
self.init_index()
try: try:
d = threading.Thread(target=self.discover) d = threading.Thread(target=self.discover)
d.daemon = True d.daemon = True
@ -44,12 +46,6 @@ class Meshenger:
c.daemon = True c.daemon = True
c.start() c.start()
b = threading.Thread(target=self.build_index)
b.daemon = True
b.start()
#os.system("python meshenger_clientserve.py")
except (KeyboardInterrupt, SystemExit): except (KeyboardInterrupt, SystemExit):
logger.info('exiting discovery thread') logger.info('exiting discovery thread')
d.join() d.join()
@ -58,6 +54,10 @@ class Meshenger:
n.join() n.join()
c.join() c.join()
sys.exit() sys.exit()
except Exception as e:
logger.warning( 'Main __init__ thread exception: %s', repr(e) )
except:
logger.warning( 'Main __init__ unknown thread exception')
while True: while True:
logger.debug('Entering main loop') logger.debug('Entering main loop')
@ -85,6 +85,7 @@ class Meshenger:
self.get_index(device, nodepath) self.get_index(device, nodepath)
logger.info('downloading messages') logger.info('downloading messages')
self.get_messages(device, nodepath, nodehash) self.get_messages(device, nodepath, nodehash)
self.build_index()
self.node_timestamp(device) self.node_timestamp(device)
time.sleep(5) #free process or ctrl+c time.sleep(5) #free process or ctrl+c
@ -114,7 +115,7 @@ Announce the node's existance to other nodes
Discover other devices by listening to the Meshenger announce port Discover other devices by listening to the Meshenger announce port
""" """
print 'Discovering' logger.info('Discovering')
bufferSize = 1024 # whatever you need? bufferSize = 1024 # whatever you need?
s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
@ -154,40 +155,46 @@ Initialize the clientserver
""" """
logger.info('Serving to client') logger.info('Serving to client')
import meshenger_clientserve import meshenger_clientserve
# set a reference to this object
meshenger_clientserve.meshenger = self
meshenger_clientserve.main() meshenger_clientserve.main()
# meshenger_clientserve.build_index_callback = self.build_index
def init_index(self):
def build_index(self):
""" """
Make an index file of all the messages present on the node. Initialize the index. Read from disk or create new.
Save the time of the last update.
""" """
logger.info('Checking own index for the first time\n')
logger.info('Building own index for the first time\n')
if not os.path.exists('index'): if not os.path.exists('index'):
with open('index','wb') as index: with open('index','wb') as index:
index.write('') index.write('')
previous_index = [] self.previous_index = []
else: else:
previous_index = open('index').readlines() self.previous_index = open('index').readlines()
self.build_index()
while not self.exitapp: def build_index(self):
current_index = os.listdir(self.msg_dir) """
if current_index != previous_index: Make an index file of all the messages present on the node.
with open('index', 'wb') as index: Save the time of the last update.
for message in os.listdir(self.msg_dir): """
index.write(message) logger.debug('build_index')
index.write('\n') current_index = os.listdir(self.msg_dir)
self.index_last_update = str(int(time.time())) if current_index != self.previous_index:
with open('index', 'wb') as index:
for message in os.listdir(self.msg_dir):
index.write(message)
index.write('\n')
self.index_last_update = str(int(time.time()))
logger.info('Index updated: %s', current_index) logger.info('Index updated: %s', current_index)
with open('index_last_update', 'wb') as indexupdate: with open('index_last_update', 'wb') as indexupdate:
indexupdate.write(self.index_last_update) ### misschien moet dit index_last_update zijn indexupdate.write(self.index_last_update) ### misschien moet dit index_last_update zijn
self.previous_index = current_index
previous_index = current_index
time.sleep(5)
def get_index(self,ip, path): def get_index(self,ip, path):
""" """

41
meshenger_clientserve.py

@ -13,26 +13,16 @@ import logging, logging.config
logging.config.fileConfig('pylog.conf') logging.config.fileConfig('pylog.conf')
logger = logging.getLogger('meshenger'+'.clientserve') logger = logging.getLogger('meshenger'+'.clientserve')
class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
messageDir = "msg" messageDir = "msg"
"""
Serve index and messages
"""
def do_GET(self): def do_GET(self):
"""
Serve index and messages
"""
if self.path == '/': if self.path == '/index' or self.path.startswith( "/"+self.messageDir ):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
f = os.path.relpath('webapp.html')
# f = os.path.join('/root/meshenger/',"webapp.html")
with open( f, 'r') as the_file:
self.wfile.write(the_file.read())
elif self.path == '/index' or self.path.startswith( "/"+self.messageDir ):
return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) return SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
elif self.path == '/log': elif self.path == '/log':
self.send_response(200) self.send_response(200)
@ -45,17 +35,17 @@ class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
self.send_response(200) #serve the webapp on every url requested self.send_response(200) #serve the webapp on every url requested
self.send_header('Content-type', 'text/html') self.send_header('Content-type', 'text/html')
self.end_headers() self.end_headers()
f = os.path.join( "webapp.html") f = os.path.relpath( 'webapp.html')
with open( f, 'r') as the_file: with open( f, 'r') as the_file:
self.wfile.write(the_file.read()) self.wfile.write(the_file.read())
"""
Allow clients to post messages
"""
def do_POST(self): def do_POST(self):
"""
Allow clients to post messages
"""
if self.path == '/send': if self.path == '/send':
logger.info('incoming message from client!')
length = int(self.headers['Content-Length']) length = int(self.headers['Content-Length'])
post_data = urlparse.parse_qs(self.rfile.read(length).decode('utf-8')) post_data = urlparse.parse_qs(self.rfile.read(length).decode('utf-8'))
@ -66,8 +56,18 @@ class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
self.end_headers() self.end_headers()
self.wfile.write('message created') self.wfile.write('message created')
def writeMessage(self, time, message): #let main rebuild message index
try:
logger.debug('try to call meshenger.build_index: %s', repr(meshenger))
meshenger.build_index()
except:
logger.error('failed to call meshenger.build_index')
pass
def writeMessage(self, time, message):
"""
Write message to disk
"""
f = os.path.join( self.messageDir, time) f = os.path.join( self.messageDir, time)
if os.path.isfile( f ): if os.path.isfile( f ):
return return
@ -77,6 +77,7 @@ class ClientServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
class ClientServe(): class ClientServe():
def __init__(self, port): def __init__(self, port):
logger.info('ClientServe.__init__')
server = HTTPServer( ('', port), ClientServeHandler) server = HTTPServer( ('', port), ClientServeHandler)
server.serve_forever() server.serve_forever()

7
meshenger_nodeserve.py

@ -28,10 +28,10 @@ class NodeServeHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
messageDir = "/msg" messageDir = "/msg"
"""
Serve index and messages
"""
def do_GET(self): def do_GET(self):
"""
Serve index and messages
"""
if self.path == '/': if self.path == '/':
self.path = "/index" self.path = "/index"
@ -49,6 +49,7 @@ class HTTPServerV6(BaseHTTPServer.HTTPServer):
class NodeServe(): class NodeServe():
def __init__(self, port): def __init__(self, port):
logger.info('NodeServe.__init__')
server = HTTPServerV6(('::', port), NodeServeHandler) server = HTTPServerV6(('::', port), NodeServeHandler)
server.serve_forever() server.serve_forever()

2
webapp.html

@ -355,7 +355,7 @@ updateOutboxView();
window.setInterval( function(){ window.setInterval( function(){
checkInbox(); checkInbox();
checkOutbox(); checkOutbox();
}, 3000 ); }, 7000 );
</script> </script>

Loading…
Cancel
Save