@@ -6,6 +6,7 @@ const SocketServer = require("./socket/base");
66const redis = require ( "./redis" ) ;
77
88const LOG = cds . log ( "/websocket" ) ;
9+ const TIMEOUT_SHUTDOWN = 2500 ;
910
1011const WebSocketAction = {
1112 Connect : "wsConnect" ,
@@ -24,7 +25,7 @@ const collectServicesAndMountAdapter = (srv, options) => {
2425 serveWebSocketServer ( options ) ;
2526 } ) ;
2627 cds . on ( "shutdown" , async ( ) => {
27- await redis . closeClients ( ) ;
28+ await shutdownWebSocketServer ( ) ;
2829 } ) ;
2930 }
3031 services [ srv . name ] = srv ;
@@ -85,7 +86,10 @@ function serveWebSocketServer(options) {
8586 serveWebSocketService ( socketServer , eventService , options ) ;
8687 }
8788 }
88- LOG ?. info ( "using websocket" , { kind : cds . env . websocket . kind , adapter : socketServer . adapterActive } ) ;
89+ LOG ?. info ( "using websocket" , {
90+ kind : cds . env . websocket . kind ,
91+ adapter : socketServer . adapter ? { impl : socketServer . adapterImpl , active : socketServer . adapterActive } : false ,
92+ } ) ;
8993 }
9094 } ) ;
9195}
@@ -108,6 +112,26 @@ async function initWebSocketServer(server, path) {
108112 }
109113}
110114
115+ async function shutdownWebSocketServer ( ) {
116+ return await new Promise ( ( resolve , reject ) => {
117+ const timeoutRef = setTimeout ( ( ) => {
118+ clearTimeout ( timeoutRef ) ;
119+ LOG ?. info ( "Shutdown timeout reached!" ) ;
120+ resolve ( ) ;
121+ } , TIMEOUT_SHUTDOWN ) ;
122+ redis
123+ . closeClients ( )
124+ . then ( ( result ) => {
125+ clearTimeout ( timeoutRef ) ;
126+ resolve ( result ) ;
127+ } )
128+ . catch ( ( err ) => {
129+ clearTimeout ( timeoutRef ) ;
130+ reject ( err ) ;
131+ } ) ;
132+ } ) ;
133+ }
134+
111135function normalizeServicePath ( servicePath , protocolPath ) {
112136 if ( servicePath . startsWith ( `${ protocolPath } /` ) ) {
113137 return servicePath . substring ( `${ protocolPath } /` . length ) ;
@@ -447,7 +471,7 @@ function deriveCurrentUser(event, data, headers, req) {
447471 }
448472}
449473
450- function deriveDefinedUser ( event , data , headers , req ) {
474+ function deriveDefinedUser ( event , data , headers ) {
451475 const include = combineValues (
452476 deriveValues ( event , data , headers , {
453477 headerNames : [ "wsUsers" , "wsUser" , "users" , "user" ] ,
0 commit comments