/// <summary> /// Application start. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Start(object sender, EventArgs e) { Global.Clients = new ConcurrentDictionary <WebSocketClient, WebSocket>(); Global.ServerID = Guid.NewGuid().ToString(); Global.Timeout = new TimeoutHandler(); Global.TimeoutCancelToken = new CancellationTokenSource(); Global.Timeout.Start(Global.TimeoutCancelToken.Token); Global.AccessTokenVerifyURL = WebRTCSocket.Properties.Settings.Default.AccessTokenVerifyURL; Global.ClientLocationRequestURL = WebRTCSocket.Properties.Settings.Default.ClientLocationRequestURL; Global.ClientLocationRequestEnabled = WebRTCSocket.Properties.Settings.Default.ClientLocationRequestEnabled; Global.UdpBroadcastEnabled = WebRTCSocket.Properties.Settings.Default.UdpBroadcastEnabled; Global.UdpBroadcastPort = WebRTCSocket.Properties.Settings.Default.UdpBroadcastPort; Global.UdpBroadcastAddress = WebRTCSocket.Properties.Settings.Default.UdpBroadcastAddress; Global.UdpBroadcastMask = WebRTCSocket.Properties.Settings.Default.UdpBroadcastMask; Global.UdpBroadcastCallbackPort = WebRTCSocket.Properties.Settings.Default.UdpBroadcastCallbackPort; Global.ClientTimeoutConnect = WebRTCSocket.Properties.Settings.Default.ClientTimeoutConnect; // UDP socket handler. Global.UdpSocket = new UdpSocketHandler(Global.UdpBroadcastEnabled, (int)Global.UdpBroadcastPort, (int)Global.UdpBroadcastCallbackPort); // If UDP broadcast is enabled. if (Global.UdpBroadcastEnabled && Global.UdpBroadcastPort > 0 && Global.UdpBroadcastCallbackPort > 0) { // Start the UDP handler. Global.UdpHandlerCancelToken = new CancellationTokenSource(); Global.UdpSocket.Start(Global.UdpHandlerCancelToken.Token); } }
/// <summary> /// Application end. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_End(object sender, EventArgs e) { if (Global.Clients != null) { try { // Stop the timeout handler. Global.Timeout.Stop(Global.TimeoutCancelToken); } catch { } try { // Stop the UDP broadcast handler. Global.UdpSocket.Stop(Global.UdpHandlerCancelToken); } catch { } // For each client. foreach (var client in Global.Clients) { try { // Close the connection. client.Value.Abort(); } catch { } } try { Global.Clients.Clear(); } catch { } } Global.Clients = null; Global.ServerID = null; Global.Timeout = null; Global.UdpSocket = null; }