-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStackManager.py
More file actions
108 lines (88 loc) · 3.47 KB
/
StackManager.py
File metadata and controls
108 lines (88 loc) · 3.47 KB
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import WifiStack
import BleStack
import logging
import commands
import time
import json
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
FORMAT = '[%(asctime)-15s][%(levelname)s][%(funcName)s] %(message)s'
logging.basicConfig(format=FORMAT)
class XdInstance(object):
def __init__(self, receive_data, receive_context):
self.receive_data = receive_data
self.receive_context = receive_context
self.id_dict = {}
self._init_stacks()
def _receive_data(self, device_ip_address, obj):
logger.debug("Calling _receive_data")
for device_id, ip in self.id_dict.iteritems():
logger.debug("device_id: " + device_id)
logger.debug("ip: " + ip)
logger.debug("device_ip_address: " + device_ip_address)
if ip == device_ip_address:
self.receive_data(device_id, obj)
def _receive_context(self, device_id, device_ip_address, rssi, human_name):
self.id_dict[device_id] = device_ip_address
self.receive_context(device_id, device_ip_address, rssi, human_name)
def _init_stacks(self):
self.server = WifiStack.WifiServer(self._receive_data)
self.server.daemon = True
self.server.start()
BleStack.set_beacon(self.get_my_ip())
BleStack.start_beacon()
self.scanner = BleStack.BleScanner(self._receive_context)
self.scanner.daemon = True
self.scanner.start()
@staticmethod
def get_my_ip():
return commands.getoutput("/sbin/ifconfig").split("\n")[1].split()[1][5:]
def send_data(self, device_id, obj):
if self.select_delivery_medium() == "WIFI":
logger.debug("Sending data over WIFI medium")
if self.id_dict[device_id] != '':
client = WifiStack.WifiClient(address=self.id_dict[device_id])
client.send(obj)
elif self.select_delivery_medium() == "BLE":
logger.debug("Sending data over BLE medium (oops)")
# def send_context(self, device_id, byteSeq):
# if self.select_exchange_medium() == "BLE":
# logger.debug("Sending context over BLE medium")
#
# elif self.select_exchange_medium() == "WIFI":
# logger.debug("Sending context over WIFI medium (oops)")
@staticmethod
def select_delivery_medium():
# For this port, only Wifi and Ble are available
return "WIFI"
@staticmethod
def select_exchange_medium():
# For this port, only Wifi and Ble are available
return "BLE"
def data(device_id, obj):
print "dev_id: " + device_id
print "obj: " + obj
def context(device_id, device_ip_address, rssi, human_name):
print "device_id: " + device_id
print "device_ip_address: " + device_ip_address
print "rssi: " + str(rssi)
print "human_name: " + human_name
xd = XdInstance(data, context)
my_ip = xd.get_my_ip()
payload = {"c": 0, "b": 0, "a": 0}
time.sleep(7)
print "my_ip: " + my_ip
while True:
if my_ip == "192.168.3.104":
# print "in 192"
for dev_id in xd.id_dict:
print "dict in 104: " + xd.id_dict[dev_id]
if xd.id_dict[dev_id] == "192.168.3.106":
xd.send_data(dev_id, json.dumps(payload))
if my_ip == "192.168.3.108":
# print "in 55"
for dev_id in xd.id_dict:
print "dict in 108: " + xd.id_dict[dev_id]
if xd.id_dict[dev_id] == "192.168.3.104":
xd.send_data(dev_id, json.dumps(payload))
time.sleep(2)