diff --git a/event/common.go b/event/common.go index 610bdc1..ffe6a8a 100644 --- a/event/common.go +++ b/event/common.go @@ -30,6 +30,9 @@ const ( // GroupServer JoinServer = Type("JoinServer") + // attributes GroupServer - the onion of the server to leave + LeaveServer = Type("LeaveServer") + ProtocolEngineStartListen = Type("ProtocolEngineStartListen") ProtocolEngineStopped = Type("ProtocolEngineStopped") diff --git a/protocol/connections/engine.go b/protocol/connections/engine.go index 4f03336..386f3fd 100644 --- a/protocol/connections/engine.go +++ b/protocol/connections/engine.go @@ -80,6 +80,7 @@ func NewProtocolEngine(identity primitives.Identity, privateKey ed25519.PrivateK engine.eventManager.Subscribe(event.RetryPeerRequest, engine.queue) engine.eventManager.Subscribe(event.InvitePeerToGroup, engine.queue) engine.eventManager.Subscribe(event.JoinServer, engine.queue) + engine.eventManager.Subscribe(event.LeaveServer, engine.queue) engine.eventManager.Subscribe(event.SendMessageToGroup, engine.queue) engine.eventManager.Subscribe(event.SendMessageToPeer, engine.queue) engine.eventManager.Subscribe(event.SendGetValMessageToPeer, engine.queue) @@ -127,6 +128,13 @@ func (e *engine) eventHandler() { e.sendMessageToPeer(ev.EventID, ev.Data[event.RemotePeer], event.ContextInvite, []byte(ev.Data[event.GroupInvite])) case event.JoinServer: e.peerWithTokenServer(ev.Data[event.GroupServer], ev.Data[event.ServerTokenOnion], ev.Data[event.ServerTokenY]) + case event.LeaveServer: + es, ok := e.ephemeralServices.Load(ev.Data[event.GroupServer]) + if ok { + ephemeralService := es.(tapir.Service) + ephemeralService.Shutdown() + e.ephemeralServices.Delete(ev.Data[event.GroupServer]) + } case event.DeleteContact: onion := ev.Data[event.RemotePeer] // We remove this peer from out blocklist which will prevent them from contacting us if we have "block unknown peers" turned on.