Fixed tests
This commit is contained in:
parent
794b1ca80e
commit
b0a6c1f528
@ -49,10 +49,8 @@ class NameMsg(IMessage):
|
||||
|
||||
buffer: bytearray = buffer_ref[0]
|
||||
|
||||
encoded_name = self.name.encode('utf-8')
|
||||
name_length = len(encoded_name)
|
||||
full_length = NameMsg.length + name_length
|
||||
if name_length == 0 or full_length > len(buffer):
|
||||
full_length = NameMsg.length + self.name_length
|
||||
if self.name_length == 0 or full_length > len(buffer):
|
||||
return 0
|
||||
|
||||
logger.debug(f'Send NameMsg [{self.network_id}/{self.thing_id}] {self.name_length}')
|
||||
@ -61,8 +59,8 @@ class NameMsg(IMessage):
|
||||
NameMsg.id,
|
||||
self.network_id,
|
||||
self.thing_id,
|
||||
name_length
|
||||
self.name_length
|
||||
]
|
||||
# Append the name string
|
||||
buffer[NameMsg.length:full_length] = encoded_name
|
||||
buffer[NameMsg.length:full_length] = self.name
|
||||
return full_length
|
||||
|
@ -68,7 +68,7 @@ class Participant:
|
||||
participants: set['Participant'] = set()
|
||||
|
||||
@staticmethod
|
||||
def GetParticipant(arg1: Union[str, int], port: Optional[int]) -> Optional['Participant']:
|
||||
def GetParticipant(arg1: Union[str, int], port: Optional[int] = None) -> Optional['Participant']:
|
||||
if port is not None:
|
||||
ip_address = str(arg1)
|
||||
for participant in Participant.participants:
|
||||
|
@ -1,14 +1,15 @@
|
||||
from RoboidControl.Participant import Participant
|
||||
from RoboidControl.Thing import Thing
|
||||
# from RoboidControl.Messages.NetworkIdMsg import NetworkIdMsg
|
||||
# from RoboidControl.Messages.ThingMsg import ThingMsg
|
||||
# from RoboidControl.Messages.NameMsg import NameMsg
|
||||
# from RoboidControl.Messages.ModelUrlMsg import ModelUrlMsg
|
||||
# from RoboidControl.Messages.Messages import IMessage
|
||||
# from RoboidControl.Messages.InvestigateMsg import InvestigateMsg
|
||||
# from RoboidControl.Messages.PoseMsg import PoseMsg
|
||||
from RoboidControl.Messages import *
|
||||
from RoboidControl.Messages.BinaryMsg import BinaryMsg
|
||||
from RoboidControl.Messages.ParticipantMsg import ParticipantMsg
|
||||
from RoboidControl.Messages.NetworkIdMsg import NetworkIdMsg
|
||||
from RoboidControl.Messages.ThingMsg import ThingMsg
|
||||
from RoboidControl.Messages.NameMsg import NameMsg
|
||||
from RoboidControl.Messages.ModelUrlMsg import ModelUrlMsg
|
||||
from RoboidControl.Messages.IMessage import IMessage
|
||||
from RoboidControl.Messages.InvestigateMsg import InvestigateMsg
|
||||
from RoboidControl.Messages.PoseMsg import PoseMsg
|
||||
|
||||
import socket
|
||||
import threading
|
||||
@ -67,7 +68,8 @@ class ParticipantUDP(Participant):
|
||||
self.is_isolated = False
|
||||
if ip_address is not None:
|
||||
self.remote_site = Participant(ip_address, port)
|
||||
self.others.append(self.remote_site)
|
||||
|
||||
Participant.AddParticipant(self)
|
||||
|
||||
self.buffer: bytearray = bytearray(256)
|
||||
|
||||
@ -89,22 +91,6 @@ class ParticipantUDP(Participant):
|
||||
|
||||
isolated_participant = None
|
||||
|
||||
# def GetParticipant(self, ip_address: str, port: int):
|
||||
# # print(f'{self.name} Get participant {ip_address} {port}')
|
||||
# # for item in self.others:
|
||||
# # print(f'- {item.ip_address} {item.port}')
|
||||
|
||||
# found_participants = (item for item in self.others
|
||||
# if item.ip_address == ip_address and item.port == port)
|
||||
# participant = next(found_participants, None)
|
||||
# return participant
|
||||
|
||||
# def AddParticipant(self, ip_address: str, port: int):
|
||||
# print(f'{self.name} Add participant {ip_address} {port}')
|
||||
# remote_participant = Participant(ip_address = ip_address, port = port)
|
||||
# self.others.append(remote_participant)
|
||||
# return remote_participant
|
||||
|
||||
#region Update
|
||||
|
||||
def Update(self, currentTimeMs: Optional[int] = None):
|
||||
@ -143,12 +129,10 @@ class ParticipantUDP(Participant):
|
||||
else:
|
||||
if self.remote_site is not None and thing.owner is not None:
|
||||
# Send to remote site
|
||||
poseMsg = PoseMsg(thing.owner.network_id, thing)
|
||||
self.Send(self.remote_site, poseMsg)
|
||||
binaryMsg = BinaryMsg(thing.owner.network_id, thing)
|
||||
self.Send(self.remote_site, binaryMsg)
|
||||
# if thing.terminate:
|
||||
# self.Remove(thing)
|
||||
self.Send(self.remote_site, PoseMsg(thing.owner.network_id, thing))
|
||||
self.Send(self.remote_site, BinaryMsg(thing.owner.network_id, thing))
|
||||
if thing.terminate:
|
||||
self.Remove(thing)
|
||||
|
||||
#endregion
|
||||
|
||||
@ -221,18 +205,18 @@ class ParticipantUDP(Participant):
|
||||
# case InvestigateMsg.id:
|
||||
# self.ProcessInvestigateMsg(InvestigateMsg(data))
|
||||
case ThingMsg.id:
|
||||
self.ProcessThingMsg(ThingMsg(data))
|
||||
self.ProcessThingMsg(sender, ThingMsg(data))
|
||||
case NameMsg.id:
|
||||
self.ProcessNameMsg(NameMsg.NameMsg.Deserialize(data))
|
||||
self.ProcessNameMsg(sender, NameMsg(data))
|
||||
case ModelUrlMsg.id:
|
||||
self.ProcessModelUrlMsg(ModelUrlMsg(data))
|
||||
self.ProcessModelUrlMsg(sender, ModelUrlMsg(data))
|
||||
case BinaryMsg.id:
|
||||
self.ProcessBinaryMsg(BinaryMsg(data))
|
||||
self.ProcessBinaryMsg(sender, BinaryMsg(data))
|
||||
case _:
|
||||
pass
|
||||
|
||||
def ProcessParticipantMsg(self, sender: Participant, msg: ParticipantMsg):
|
||||
logger.debug(f'{self.name} Process participantMsg {msg.networkId}')
|
||||
logger.debug(f'{self.name} Process participantMsg {msg.network_id}')
|
||||
|
||||
def ProcessSiteIdMsg(self, sender: Participant, msg: NetworkIdMsg):
|
||||
logger.debug(f'{self.name} Process NetworkIdMsg {self.network_id} -> {msg.network_id}')
|
||||
@ -243,13 +227,13 @@ class ParticipantUDP(Participant):
|
||||
self.SendThingInfo(sender, thing, recursively=True)
|
||||
|
||||
def ProcessInvestigateMsg(self, sender: Participant, msg: InvestigateMsg):
|
||||
logger.debug(f'{self.name} Process InestigateMsg [{msg.networkId}/{msg.thingId}]')
|
||||
logger.debug(f'{self.name} Process InestigateMsg [{msg.network_id}/{msg.thing_id}]')
|
||||
|
||||
def ProcessThingMsg(self, msg: ThingMsg):
|
||||
logger.debug(f'{self.name}: Process ThingMsg [{msg.networkId}/{msg.thingId}] {msg.thingType} {msg.parentId}')
|
||||
def ProcessThingMsg(self, sender: Participant, msg: ThingMsg):
|
||||
logger.debug(f'{self.name}: Process ThingMsg [{msg.network_id}/{msg.thing_id}] {msg.thing_type} {msg.parent_id}')
|
||||
|
||||
def ProcessNameMsg(self, msg: NameMsg):
|
||||
logger.debug(f'{self.name}: Process NameMsg [{msg.networkId}/{msg.thingId}] {msg.nameLength} {msg.name}')
|
||||
def ProcessNameMsg(self, sender: Participant, msg: NameMsg):
|
||||
logger.debug(f'{self.name}: Process NameMsg [{msg.network_id}/{msg.thing_id}] {msg.name_length} {msg.name}')
|
||||
|
||||
owner: Optional[Participant] = Participant.GetParticipant(msg.network_id)
|
||||
if owner is None:
|
||||
@ -261,11 +245,11 @@ class ParticipantUDP(Participant):
|
||||
|
||||
thing.name = msg.name
|
||||
|
||||
def ProcessModelUrlMsg(self, msg: ModelUrlMsg):
|
||||
logger.debug(f'{self.name}: Process ModelUrlMsg [{msg.networkId}/{msg.thingId}] {msg.urlLength} {msg.url}')
|
||||
def ProcessModelUrlMsg(self, sender: Participant, msg: ModelUrlMsg):
|
||||
logger.debug(f'{self.name}: Process ModelUrlMsg [{msg.network_id}/{msg.thing_id}] {msg.url_length} {msg.url}')
|
||||
|
||||
def ProcessPoseMsg(self, sender: Participant, msg: PoseMsg):
|
||||
logger.debug(f'{self.name}: Process PoseMsg [{msg.networkId}/{msg.thingId}] {msg.poseType}')
|
||||
logger.debug(f'{self.name}: Process PoseMsg [{msg.network_id}/{msg.thing_id}] {msg.pose_type}')
|
||||
|
||||
owner: Optional[Participant] = Participant.GetParticipant(msg.network_id)
|
||||
if owner is None:
|
||||
@ -284,8 +268,8 @@ class ParticipantUDP(Participant):
|
||||
if (msg.pose_type & PoseMsg.AngularVelocity) != 0:
|
||||
thing.angular_velocity = msg.angular_velocity
|
||||
|
||||
def ProcessBinaryMsg(self, msg: BinaryMsg):
|
||||
logger.debug(f'{self.name}: Process BinaryMsg [{msg.networkId}/{msg.thingId}] {msg.dataLength}')
|
||||
def ProcessBinaryMsg(self, sender: Participant, msg: BinaryMsg):
|
||||
logger.debug(f'{self.name}: Process BinaryMsg [{msg.network_id}/{msg.thing_id}] {msg.data_length}')
|
||||
|
||||
thing: Optional[Thing] = self.Get(msg.thing_id)
|
||||
if thing is not None:
|
||||
|
@ -19,7 +19,7 @@ class SiteServer(ParticipantUDP):
|
||||
"""! Create a new site server
|
||||
@param port The port of which to receive the messages
|
||||
"""
|
||||
super().__init__(ip_address = "127.0.0.1", port = port)
|
||||
super().__init__(local_port = port)
|
||||
self.isolated = False # site servers are never isolated
|
||||
self.publishInterval = 0
|
||||
|
||||
@ -31,9 +31,9 @@ class SiteServer(ParticipantUDP):
|
||||
#region Receive
|
||||
|
||||
def ProcessParticipantMsg(self, sender, msg):
|
||||
ParticipantUDP.ProcessParticipantMsg(sender, msg)
|
||||
ParticipantUDP.ProcessParticipantMsg(self, sender, msg)
|
||||
if msg.network_id != sender.network_id:
|
||||
self.Send(sender, sender.network_id)
|
||||
self.Send(sender, NetworkIdMsg(sender.network_id))
|
||||
|
||||
def ProcessNetworkIdMsg(self, sender, msg):
|
||||
pass
|
||||
@ -41,13 +41,14 @@ class SiteServer(ParticipantUDP):
|
||||
def ProcessThingMsg(self, sender, msg: ThingMsg):
|
||||
thing: Optional[Thing] = sender.Get(msg.thing_id)
|
||||
if thing is None:
|
||||
Thing(sender, msg.thing_type, msg.thing_id)
|
||||
if msg.parent_id != 0:
|
||||
parent = sender.Get(msg.parent_id)
|
||||
if parent is not None:
|
||||
print(f'Could not find parent [{msg.network_id}/{msg.parent_id}]')
|
||||
else:
|
||||
parent = None
|
||||
|
||||
Thing(owner=sender, thing_type=msg.thing_type, thing_id=msg.thing_id, parent = parent)
|
||||
|
||||
if msg.parent_id != 0:
|
||||
thing.parent = sender.Get(msg.parent_id)
|
||||
if thing.parent is not None:
|
||||
print(f'Could not find parent [{msg.network_id}/{msg.parent_id}]')
|
||||
else:
|
||||
thing.parent = None
|
||||
|
||||
#endregion Receive
|
@ -90,6 +90,8 @@ class Thing:
|
||||
## Boolean indicating the thing has an updated angular velocity
|
||||
self.angular_velocity_updated: bool = False
|
||||
|
||||
self.terminate: bool = False
|
||||
|
||||
if self.owner is not None:
|
||||
self.owner.Add(self)
|
||||
|
||||
|
@ -46,8 +46,8 @@ class ThingTest(unittest.TestCase):
|
||||
def test_thing_msg(self):
|
||||
site = SiteServer()
|
||||
|
||||
participant = ParticipantUDP(ip_address="127.0.0.1", port=7683)
|
||||
thing = Thing()
|
||||
participant = ParticipantUDP(ip_address="127.0.0.1", port=7681, local_port=7682)
|
||||
thing = Thing(participant)
|
||||
thing.name = "First thing"
|
||||
thing.model_url = "https://passer.life/extras/ant.jpg"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user