add callback for receiving message
This commit is contained in:
@@ -6,6 +6,7 @@ from drone_services.msg import DroneStatus
|
|||||||
import asyncio
|
import asyncio
|
||||||
import websockets.server
|
import websockets.server
|
||||||
import threading
|
import threading
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
class ApiListener(Node):
|
class ApiListener(Node):
|
||||||
@@ -13,14 +14,19 @@ class ApiListener(Node):
|
|||||||
super().__init__('api_listener')
|
super().__init__('api_listener')
|
||||||
self.get_logger().info('ApiListener node started')
|
self.get_logger().info('ApiListener node started')
|
||||||
self.drone_status_subscriber = self.create_subscription(DroneStatus, '/drone/status', self.drone_status_callback, 10)
|
self.drone_status_subscriber = self.create_subscription(DroneStatus, '/drone/status', self.drone_status_callback, 10)
|
||||||
|
|
||||||
self.last_battery_percentage = 0
|
self.last_battery_percentage = 0
|
||||||
self.last_cpu_usage = 0
|
self.last_cpu_usage = 0
|
||||||
|
|
||||||
|
self.last_message = ""
|
||||||
|
self.message_queue = []
|
||||||
|
self.checking_for_message = False
|
||||||
|
|
||||||
self.server = None
|
self.server = None
|
||||||
self.server_thread = threading.Thread(target=self.start_api_thread,daemon=True)
|
self.server_thread = threading.Thread(target=self.start_api_thread,daemon=True)
|
||||||
self.server_thread.start()
|
self.server_thread.start()
|
||||||
|
|
||||||
def drone_status_callback(self, msg):
|
def drone_status_callback(self, msg):
|
||||||
self.get_logger().info('Received drone battery and cpu: {0} {1}'.format(msg.battery_percentage,msg.cpu_usage))
|
|
||||||
self.last_battery_percentage = msg.battery_percentage
|
self.last_battery_percentage = msg.battery_percentage
|
||||||
self.last_cpu_usage = msg.cpu_usage
|
self.last_cpu_usage = msg.cpu_usage
|
||||||
|
|
||||||
@@ -33,13 +39,24 @@ class ApiListener(Node):
|
|||||||
self.get_logger().info('API started')
|
self.get_logger().info('API started')
|
||||||
await self.server.wait_closed()
|
await self.server.wait_closed()
|
||||||
|
|
||||||
|
async def handle_message_receive(self,websocket):
|
||||||
|
self.last_message = await websocket.recv()
|
||||||
|
|
||||||
|
def message_received_callback(self):
|
||||||
|
self.get_logger().info(f"Received message: {self.last_message}")
|
||||||
|
self.checking_for_message = False
|
||||||
|
|
||||||
|
# def handle_message(self, message):
|
||||||
|
# deserialized_msg = json.loads(message)
|
||||||
|
|
||||||
async def api_handler(self, websocket):
|
async def api_handler(self, websocket):
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
message = await websocket.recv()
|
if not self.checking_for_message:
|
||||||
self.get_logger().info('Received message: {0}'.format(message))
|
self.checking_for_message = True
|
||||||
await websocket.send("Yeet ")
|
task = asyncio.create_task(self.handle_message_receive(websocket))
|
||||||
|
task.add_done_callback(self.message_received_callback)
|
||||||
|
|
||||||
except websockets.exceptions.ConnectionClosed:
|
except websockets.exceptions.ConnectionClosed:
|
||||||
self.get_logger().info('Connection closed')
|
self.get_logger().info('Connection closed')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user