Просмотр исходного кода

[HttpApiController] implement the disconnection of a single client

The http route returns as soon as the client has fully disconnected.
Jakob Ackermann 6 лет назад
Родитель
Сommit
de35fc5ecf

+ 15 - 1
services/real-time/app/coffee/HttpApiController.coffee

@@ -18,4 +18,18 @@ module.exports = HttpApiController =
 		rate = parseFloat(rate) || 0
 		logger.log {rate}, "setting client drain rate"
 		DrainManager.startDrain io, rate
-		res.send 204
+		res.send 204
+
+	disconnectClient: (req, res, next) ->
+		io = req.app.get("io")
+		client_id = req.params.client_id
+		client = io.sockets.sockets[client_id]
+
+		if !client
+			logger.info({client_id}, "api: client already disconnected")
+			res.sendStatus(404)
+			return
+		logger.warn({client_id}, "api: requesting client disconnect")
+		client.on "disconnect", () ->
+			res.sendStatus(204)
+		client.disconnect()

+ 1 - 0
services/real-time/app/coffee/Router.coffee

@@ -53,6 +53,7 @@ module.exports = Router =
 		app.post "/project/:project_id/message/:message", httpAuth, bodyParser.json(limit: "5mb"), HttpApiController.sendMessage
 		
 		app.post "/drain", httpAuth, HttpApiController.startDrain
+		app.post "/client/:client_id/disconnect", httpAuth, HttpApiController.disconnectClient
 
 		session.on 'connection', (error, client, session) ->
 			client?.on "error", (err) ->