Someone knows how to get the current DDP Connection on the server by a given connectionId
? And if so, is it possible to force-close the connection from the server env?
I just checked, if you know the connectionId you can call the following on the server
Meteor.default_server.sessions[connectionId].connectionHandle.close()
and it will close the connection, but the client will simply reconnect. I have not found out how to prevent that.
Ok, I found a nifty workaround by using the livedata framework. Instead of closing the connection server-side, we send a message to the the connection (client) and have the client disconnect. On the client we need to overwrite the connection._livedata_error
function
DDP.onReconnect(function(connection){
console.log(`onReconnect ${connection._lastSessionId}`);
// save original function
const livedata_error = connection._livedata_error;
// overwrite handler
connection._livedata_error = function(msg) {
// does this error msg contain disconnect: true
if(msg && msg.disconnect && msg.disconnect === true) {
Meteor.disconnect()
} else {
// call original function
_livedata_error(msg);
}
}
}
With this patch in place we can use the following on the server
Meteor.default_server.sessions[connectionId].send({msg:"error",disconnect: true})