Fix ack issue and changed events to capitals
This commit is contained in:
@@ -15,8 +15,8 @@ class SimpleBot(EventTarget):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.agent = Viewer.Agent()
|
||||
self.agent.on("message", self.handleMessage)
|
||||
self.agent.on("event", self.handleEvent)
|
||||
self.agent.on("Message", self.handleMessage)
|
||||
self.agent.on("Event", self.handleEvent)
|
||||
|
||||
async def handleSystemMessages(self, simulator, message):
|
||||
# We only really care about the parent simulator here
|
||||
@@ -62,7 +62,7 @@ class SimpleBot(EventTarget):
|
||||
self.agentUpdate()
|
||||
|
||||
elif message.name == "ImprovedInstantMessage":
|
||||
await self.fire("instantmessage",
|
||||
await self.fire("InstantMessage",
|
||||
message.MessageBlock.ID,
|
||||
message.AgentData.AgentID,
|
||||
message.MessageBlock.FromAgentName.decode(),
|
||||
@@ -79,7 +79,7 @@ class SimpleBot(EventTarget):
|
||||
im = body["instantmessage"]["message_params"]
|
||||
print("Accepting ChatterBoxInvitation from payload", body)
|
||||
await sim.capabilities["ChatSessionRequest"].acceptInvitation(im["id"])
|
||||
await self.fire("instantmessage",
|
||||
await self.fire("InstantMessage",
|
||||
im["id"],
|
||||
im["from_id"],
|
||||
im["from_name"],
|
||||
@@ -100,11 +100,11 @@ class SimpleBot(EventTarget):
|
||||
|
||||
async def handleEvent(self, sim, name, body):
|
||||
await self.handleSystemEvent(sim, name, body)
|
||||
await self.fire("event", sim, name, body, name=name)
|
||||
await self.fire("Event", sim, name, body, name=name)
|
||||
|
||||
async def handleMessage(self, simulator, message):
|
||||
await self.handleSystemMessages(simulator, message)
|
||||
await self.fire("message", simulator, message, name=message.name)
|
||||
await self.fire("Message", simulator, message, name=message.name)
|
||||
|
||||
def send(self, message, reliable = False):
|
||||
self.agent.send(message, reliable)
|
||||
|
||||
@@ -36,8 +36,8 @@ class Agent(EventTarget):
|
||||
logger.debug(f"Setting parent simulator to {sim}")
|
||||
self.simulator = sim
|
||||
|
||||
sim.on("message", self.handleMessage)
|
||||
sim.on("event", self.handleEvent)
|
||||
sim.on("Message", self.handleMessage)
|
||||
sim.on("Event", self.handleEvent)
|
||||
return sim
|
||||
|
||||
def removeSimulator(self, simulator):
|
||||
@@ -63,15 +63,15 @@ class Agent(EventTarget):
|
||||
elif msg.name == "LogoutReply":
|
||||
logger.debug(f"LogoutReply from {sim}")
|
||||
self.removeSimulator(sim)
|
||||
await self.fire("logout")
|
||||
await self.fire("Logout")
|
||||
|
||||
elif msg.name == "KickUser":
|
||||
logger.debug(f"KickUser from {sim}")
|
||||
self.removeSimulator(sim)
|
||||
await self.fire("kicked")
|
||||
await self.fire("logout")
|
||||
await self.fire("Kicked")
|
||||
await self.fire("Logout")
|
||||
|
||||
await self.fire("message", sim, msg)
|
||||
await self.fire("Message", sim, msg)
|
||||
|
||||
async def handleEvent(self, sim, name, body):
|
||||
logger.debug(f"EventQueue \"{name}\" from {sim}")
|
||||
@@ -131,7 +131,7 @@ class Agent(EventTarget):
|
||||
else:
|
||||
logger.warning(f"Received EstablishAgentCommunication for unknown host {host}")
|
||||
|
||||
await self.fire("event", sim, name, body)
|
||||
await self.fire("Event", sim, name, body)
|
||||
|
||||
async def login(self, login):
|
||||
if login["login"] == "false":
|
||||
@@ -171,11 +171,13 @@ class Agent(EventTarget):
|
||||
for simulator in self.simulators:
|
||||
if not await simulator.ping():
|
||||
self.removeSimulator(simulator)
|
||||
else:
|
||||
await simulator.sendAcks()
|
||||
|
||||
if not self.simulator:
|
||||
break
|
||||
|
||||
await asyncio.sleep(0.1)
|
||||
await asyncio.sleep(1)
|
||||
|
||||
except asyncio.exceptions.CancelledError as e:
|
||||
# Attempt to gracefully logout
|
||||
|
||||
@@ -32,17 +32,17 @@ class Circuit(asyncio.Protocol, EventTarget):
|
||||
if pkt.flags & pkt.FLAGS.ACK:
|
||||
self.acknowledge(pkt.acks)
|
||||
|
||||
asyncio.create_task(self.fire("message", addr, pkt.body))
|
||||
asyncio.create_task(self.fire("Message", addr, pkt.body))
|
||||
|
||||
def error_received(self, exc):
|
||||
asyncio.create_task(self.fire("error", exc))
|
||||
asyncio.create_task(self.fire("Error", exc))
|
||||
|
||||
def connection_lost(self, exc):
|
||||
if not self.transport:
|
||||
return
|
||||
|
||||
self.transport = None
|
||||
asyncio.create_task(self.fire("close", exc))
|
||||
asyncio.create_task(self.fire("Close", exc))
|
||||
|
||||
def close(self):
|
||||
if not self.transport:
|
||||
@@ -50,7 +50,7 @@ class Circuit(asyncio.Protocol, EventTarget):
|
||||
|
||||
self.transport.close()
|
||||
self.transport = None
|
||||
asyncio.create_task(self.fire("close", None))
|
||||
asyncio.create_task(self.fire("Close", None))
|
||||
|
||||
def send(self, message, reliable = False):
|
||||
if not self.transport:
|
||||
|
||||
@@ -9,7 +9,7 @@ class EventQueue(EventTarget):
|
||||
self.task = None
|
||||
|
||||
async def handleEvent(self, event):
|
||||
await self.fire("event", event["message"], event["body"])
|
||||
await self.fire("Event", event["message"], event["body"])
|
||||
|
||||
async def run(self):
|
||||
while True:
|
||||
|
||||
@@ -335,8 +335,8 @@ class BlockArray(Block):
|
||||
yield self[i]
|
||||
|
||||
def toStream(self, handle):
|
||||
if self.count != None:
|
||||
handle.write(sUInt8.pack(self.count))
|
||||
if self.count == None:
|
||||
handle.write(sUInt8.pack(len(self)))
|
||||
|
||||
for i in range(self.count or len(self.blocks)):
|
||||
self[i].toStream(handle)
|
||||
|
||||
@@ -28,7 +28,7 @@ class Simulator(EventTarget):
|
||||
self.pingSequence = 0
|
||||
self.pendingPings = {}
|
||||
self.eventQueue = eventqueue.EventQueue(self)
|
||||
self.eventQueue.on("event", self.handleEvent)
|
||||
self.eventQueue.on("Event", self.handleEvent)
|
||||
self.messageTemplate = messages.getDefaultTemplate()
|
||||
|
||||
def __del__(self):
|
||||
@@ -43,7 +43,7 @@ class Simulator(EventTarget):
|
||||
async def connect(self, host, circuitCode):
|
||||
self.host = host
|
||||
self.circuit = await Circuit.create(host)
|
||||
self.circuit.on("message", self.handleMessage)
|
||||
self.circuit.on("Message", self.handleMessage)
|
||||
|
||||
msg = self.messageTemplate.getMessage("UseCircuitCode")
|
||||
msg.CircuitCode.Code = circuitCode
|
||||
@@ -97,13 +97,13 @@ class Simulator(EventTarget):
|
||||
|
||||
# Don't break the whole script!
|
||||
try:
|
||||
await self.fire("message", self, msg, name=msg.name)
|
||||
await self.fire("Message", self, msg, name=msg.name)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
|
||||
async def handleEvent(self, name, body):
|
||||
try:
|
||||
await self.fire("event", self, name, body)
|
||||
await self.fire("Event", self, name, body)
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
|
||||
@@ -115,6 +115,21 @@ class Simulator(EventTarget):
|
||||
self.capabilities = await seed.getCapabilities(Capabilities)
|
||||
self.eventQueue.start()
|
||||
|
||||
async def sendAcks(self):
|
||||
if len(self.circuit.acks) == 0:
|
||||
return False
|
||||
|
||||
msg = self.messageTemplate.getMessage("PacketAck")
|
||||
for i in range(255):
|
||||
if len(self.circuit.acks) > 0:
|
||||
msg.Packets[i].ID = self.circuit.acks.pop(0)
|
||||
else:
|
||||
break
|
||||
|
||||
self.send(msg)
|
||||
return len(self.circuit.acks) > 0
|
||||
|
||||
|
||||
async def ping(self, timeout = 5.0, forceUsePingCheck = False):
|
||||
# If we already have a message within the timeout range,
|
||||
# just use that instead. Unless specified otherwise.
|
||||
|
||||
Reference in New Issue
Block a user