diff --git a/packages/server/src/federation.js b/packages/server/src/federation.js index c3971e2..a8b6488 100644 --- a/packages/server/src/federation.js +++ b/packages/server/src/federation.js @@ -95,7 +95,9 @@ spawn named '@syndicate-lang/server/federation/LocalLinkFactory' { msg: (vs) => sendFromPOA(W.Msg(ep, vs)), }); assert P.Envelope(scope, Observe(spec)); - stop on message P.Envelope(managementScope, P.ToPOA(sessionId, W.Clear(ep))); + stop on message P.Envelope(managementScope, P.ToPOA(sessionId, W.Clear(ep))) { + sendFromPOA(W.End(ep)); + } } } @@ -338,8 +340,7 @@ spawn named '@syndicate-lang/server/federation/ScopeFactory' { // summarise(); } - on message P.Envelope(managementScope, P.ToPOA(linkid, W.Clear($localid))) { - // NB ToPOA, not FromPOA! + on message P.Envelope(managementScope, P.FromPOA(linkid, W.End($localid))) { (this.linkMatches.get(localid) || Set()).forEach((captures) => { removeMatch(localid, captures, linkid); }); diff --git a/packages/server/src/protocol.js b/packages/server/src/protocol.js index 54e8cc7..3e84212 100644 --- a/packages/server/src/protocol.js +++ b/packages/server/src/protocol.js @@ -14,6 +14,7 @@ message type Message(body); message type Add(endpointName, captures); message type Del(endpointName, captures); message type Msg(endpointName, captures); +message type End(endpointName); message type Err(detail); message type Ping(); @@ -33,7 +34,7 @@ Object.assign(module.exports, { Connect, Peer, Commit, Assert, Clear, Message, - Add, Del, Msg, Err, + Add, Del, Msg, Err, End, Ping, Pong, makeDecoder, }); diff --git a/packages/server/src/server.js b/packages/server/src/server.js index 64bf6d2..99fcaec 100644 --- a/packages/server/src/server.js +++ b/packages/server/src/server.js @@ -115,7 +115,7 @@ spawn named '@syndicate-lang/server/server/POAHandler' { this.assertion = newAssertion; }); on message P.FromPOA(connId, W.Clear(ep)) inboundTurn.extend(() => { - epFacet.stop(); + epFacet.stop(() => { outboundTurn.extend(W.End(ep)); }); }); } }