Ignore:
Timestamp:
Aug 1, 2022, 12:54:31 PM (2 years ago)
Author:
alloc
Message:

Switched to use SpaceWizards.HttpListener

Location:
binary-improvements2/MapRendering/Web/SSE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements2/MapRendering/Web/SSE/EventBase.cs

    r372 r382  
    22using System.Collections.Generic;
    33using System.IO;
    4 using System.Net;
    54using System.Net.Sockets;
    65using System.Text;
    76using AllocsFixes.JSON;
     7using HttpListenerResponse = SpaceWizards.HttpListener.HttpListenerResponse;
    88
    99namespace AllocsFixes.NetConnections.Servers.Web.SSE {
     
    116116                                                        Log.Exception (e);
    117117                                                }
    118 
    119                                                 resp.Close ();
    120118                                        } catch (Exception e) {
    121119                                                currentlyOpen--;
  • binary-improvements2/MapRendering/Web/SSE/EventLog.cs

    r369 r382  
    1212                        string date = $"{_timestamp.Year:0000}-{_timestamp.Month:00}-{_timestamp.Day:00}";
    1313                        string time = $"{_timestamp.Hour:00}:{_timestamp.Minute:00}:{_timestamp.Second:00}";
     14                        string isotime = _timestamp.ToString ("o");
    1415                        string uptime = _uptime.ToString ();
    1516                        string message = _plainMsg;
     
    2122                        data.Add ("date", new JSONString (date));
    2223                        data.Add ("time", new JSONString (time));
     24                        data.Add ("isotime", new JSONString (isotime));
    2325                        data.Add ("uptime", new JSONString (uptime));
    2426
  • binary-improvements2/MapRendering/Web/SSE/SseHandler.cs

    r367 r382  
    55using System.Threading;
    66using AllocsFixes.NetConnections.Servers.Web.Handlers;
     7using HttpListenerRequest = SpaceWizards.HttpListener.HttpListenerRequest;
     8using HttpListenerResponse = SpaceWizards.HttpListener.HttpListenerResponse;
    79
    810// Implemented following HTML spec
     
    1012
    1113namespace AllocsFixes.NetConnections.Servers.Web.SSE {
    12         public class SseHandler : PathHandler {
     14        public class SseHandler : AbsHandler {
    1315                private readonly Dictionary<string, EventBase> events = new CaseInsensitiveStringDictionary<EventBase> ();
    14                
     16
    1517                private ThreadManager.ThreadInfo queueThead;
    1618                private readonly AutoResetEvent evSendRequest = new AutoResetEvent (false);
     
    1820
    1921                public SseHandler (string _moduleName = null) : base (_moduleName) {
    20                         Type[] ctorTypes = {typeof (SseHandler)};
    21                         object[] ctorParams = {this};
     22                        Type[] ctorTypes = { typeof (SseHandler) };
     23                        object[] ctorParams = { this };
    2224
    2325                        foreach (Type t in Assembly.GetExecutingAssembly ().GetTypes ()) {
     
    2527                                        ConstructorInfo ctor = t.GetConstructor (ctorTypes);
    2628                                        if (ctor != null) {
    27                                                 EventBase apiInstance = (EventBase) ctor.Invoke (ctorParams);
    28                                                 addEvent (apiInstance.Name, apiInstance);
     29                                                EventBase apiInstance = (EventBase)ctor.Invoke (ctorParams);
     30                                                AddEvent (apiInstance.Name, apiInstance);
    2931                                        }
    3032                                }
     
    3436                public override void SetBasePathAndParent (Web _parent, string _relativePath) {
    3537                        base.SetBasePathAndParent (_parent, _relativePath);
    36                        
     38
    3739                        queueThead = ThreadManager.StartThread ("SSE-Processing_" + urlBasePath, QueueProcessThread, ThreadPriority.BelowNormal,
    3840                                _useRealThread: true);
     
    4547                }
    4648
    47                 private void addEvent (string _eventName, EventBase _eventInstance) {
     49                public void AddEvent (string _eventName, EventBase _eventInstance) {
    4850                        events.Add (_eventName, _eventInstance);
    4951                        WebPermissions.Instance.AddKnownModule ("webevent." + _eventName, _eventInstance.DefaultPermissionLevel ());
    5052                }
    5153
    52                 public override void HandleRequest (HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _user,
     54                public override void HandleRequest (string _requestPath, HttpListenerRequest _req, HttpListenerResponse _resp, WebConnection _con,
    5355                        int _permissionLevel) {
    54                         string eventName = _req.Url.AbsolutePath.Remove (0, urlBasePath.Length);
     56                        string eventName = _requestPath.Remove (0, urlBasePath.Length);
    5557
    5658                        if (!events.TryGetValue (eventName, out EventBase eventInstance)) {
    5759                                Log.Out ($"Error in {nameof (SseHandler)}.HandleRequest(): No handler found for event \"{eventName}\"");
    58                                 _resp.StatusCode = (int) HttpStatusCode.NotFound;
     60                                _resp.StatusCode = (int)HttpStatusCode.NotFound;
    5961                                return;
    6062                        }
    6163
    62                         if (!AuthorizeForEvent (eventName, _permissionLevel)) {
    63                                 _resp.StatusCode = (int) HttpStatusCode.Forbidden;
    64                                 if (_user != null) {
     64                        if (!IsAuthorizedForEvent (eventName, _permissionLevel)) {
     65                                _resp.StatusCode = (int)HttpStatusCode.Forbidden;
     66                                if (_con != null) {
    6567                                        //Log.Out ($"{nameof(SseHandler)}: user '{user.SteamID}' not allowed to access '{eventName}'");
    6668                                }
     
    8082                                Log.Error ($"Error in {nameof (SseHandler)}.HandleRequest(): Handler {eventInstance.Name} threw an exception:");
    8183                                Log.Exception (e);
    82                                 _resp.StatusCode = (int) HttpStatusCode.InternalServerError;
     84                                _resp.StatusCode = (int)HttpStatusCode.InternalServerError;
    8385                        }
    8486                }
    8587
    86                 private bool AuthorizeForEvent (string _eventName, int _permissionLevel) {
     88                private bool IsAuthorizedForEvent (string _eventName, int _permissionLevel) {
    8789                        return WebPermissions.Instance.ModuleAllowedWithLevel ("webevent." + _eventName, _permissionLevel);
    8890                }
    8991
    9092                private void QueueProcessThread (ThreadManager.ThreadInfo _threadInfo) {
    91                         try {
    92                                 while (!shutdown && !_threadInfo.TerminationRequested ()) {
    93                                         evSendRequest.WaitOne (500);
     93                        while (!shutdown && !_threadInfo.TerminationRequested ()) {
     94                                evSendRequest.WaitOne (500);
    9495
    95                                         foreach (KeyValuePair<string, EventBase> kvp in events) {
     96                                foreach (KeyValuePair<string, EventBase> kvp in events) {
     97                                        try {
    9698                                                kvp.Value.ProcessSendQueue ();
     99                                        } catch (Exception e) {
     100                                                Log.Error ($"SSE ({kvp.Key}): Error processing send queue");
     101                                                Log.Exception (e);
    97102                                        }
    98103                                }
    99                         } catch (Exception e) {
    100                                 Log.Error ("SSE: Error processing send queue");
    101                                 Log.Exception (e);
    102104                        }
    103105                }
Note: See TracChangeset for help on using the changeset viewer.