· 8 years ago · Feb 23, 2018, 12:52 PM
1import struct
2import sys
3import json
4import sqlite3
5import logging
6
7def read_addon_message():
8 raw_length = sys.stdin.buffer.read(4)
9 if 0 == len(raw_length):
10 return None
11 message_length = struct.unpack('@I', raw_length)[0]
12 raw_message = sys.stdin.read(message_length)
13 return json.loads(raw_message)
14
15def encode_addon_message(a_message):
16 encoded_content = json.dumps(a_message)
17 return {
18 'length': struct.pack('@I', len(encoded_content)),
19 'content': encoded_content,
20 }
21
22def send_addon_message(a_message):
23 encoded_message = encode_addon_message(a_message)
24 sys.stdout.buffer.write(encoded_message['length'])
25 sys.stdout.buffer.write(encoded_message['content'].encode(sys.stdout.encoding))
26 sys.stdout.flush()
27
28logging.basicConfig(filename='webextdev.log',level=logging.DEBUG)
29logging.info('Startup.')
30
31dbConn = sqlite3.connect('webextdev.sqlite')
32dbConn.execute("""
33 CREATE TABLE IF NOT EXISTS foo (foo TEXT)
34""")
35
36while True:
37 message = read_addon_message()
38
39 if message is None:
40 break
41
42 logging.info('Message: {}'.format(message))
43
44 if "ping" == message:
45 send_addon_message("pong")
46 else:
47 dbConn.execute("""
48 INSERT INTO foo (foo) VALUES (:foo)
49 """, {'foo': message})
50 dbConn.commit()
51 send_addon_message({"echo": message})
52
53
54logging.info('Exit')
55dbConn.close()