Explorar o código

Streamlined Logging
Fixed Serialization Issue in ReadOriginalValues

Frank van den Bos %!s(int64=2) %!d(string=hai) anos
pai
achega
e9584fb29e

+ 1 - 1
InABox.Core/Serialization.cs

@@ -629,7 +629,7 @@ namespace InABox.Core
             for (int i = 0; i < nOriginalValues; ++i)
             {
                 var key = reader.ReadString();
-                if (DatabaseSchema.Property(typeof(TObject), key) is IProperty prop)
+                if (DatabaseSchema.Property(obj.GetType(), key) is IProperty prop)
                 {
                     var value = reader.ReadBinaryValue(prop.PropertyType);
                     if (prop.Parent is null)

+ 2 - 2
InABox.Database/IProvider.cs

@@ -19,7 +19,7 @@ namespace InABox.Database
 
         IEnumerable<object[]> List<T>(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null) where T : Entity, new();
         
-        CoreTable Query<T>(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool log = true, bool distinct = false) where T : Entity, new();
+        CoreTable Query<T>(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool log = false, bool distinct = false) where T : Entity, new();
         
         /// <summary>
         /// Same as <see cref="Query{T}(Filter{T}, Columns{T}, SortOrder{T}, int, bool)"/>, but only for deleted items
@@ -31,7 +31,7 @@ namespace InABox.Database
         /// <param name="sort"></param>
         /// <param name="top"></param>
         /// <returns></returns>
-        CoreTable QueryDeleted<T>(Deletion deletion, Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue) where T : Entity, new();
+        CoreTable QueryDeleted<T>(Deletion deletion, Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool deleted = false) where T : Entity, new();
 
         T[] Load<T>(Filter<T>? filter = null, SortOrder<T>? sort = null) where T : Entity, new();
 

+ 7 - 16
InABox.Server/RPC/Handlers/RPCCommandHandler.cs

@@ -6,16 +6,13 @@ using NPOI.SS.Formula.Functions;
 
 namespace InABox.Rpc
 {
-    public abstract class RpcCommandHandler<TSender, TCommand, TParameters, TResult> : IRpcCommandHandler 
+    public abstract class RpcCommandHandler<TSender, TParameters, TResult> : IRpcCommandHandler 
         where TSender : class
-        where TCommand : IRpcCommand<TParameters, TResult>
         where TParameters : IRpcCommandParameters, new()
         where TResult : IRpcCommandResult
     {
         public TSender Sender { get; }
 
-        private static bool IsLogCommand = typeof(TCommand).IsAssignableTo(typeof(IRpcLogCommand));
-
         public RpcCommandHandler(TSender sender)
         {
             Sender = sender ?? throw new ArgumentNullException(nameof(sender));
@@ -27,23 +24,17 @@ namespace InABox.Rpc
         {
             var start = DateTime.Now;
             var parameters = Serialization.ReadBinary<TParameters>(payload, BinarySerializationSettings.Latest);
-            if (IsLogCommand)
-            {
-                Logger.Send(LogType.Information, session.UserID, $"[{session.Platform} {session.Version}] {parameters.FullDescription()}");
-            }
+            //Logger.Send(LogType.Information, session.UserID, $"[{session.Platform} {session.Version}] {parameters.FullDescription()}");
 
             try
             {
                 var result = Execute(session, parameters);
 
-                if (IsLogCommand)
-                {
-                    var description = result.FullDescription();
-                    Logger.Send(LogType.Information, session.UserID, string.Format("[{0} {1}] [{2:D8}] {3} Complete{4}",
-                        session.Platform, session.Version,
-                        (int)DateTime.Now.Subtract(start).TotalMilliseconds, parameters.ShortDescription(),
-                        string.IsNullOrWhiteSpace(description) ? "" : $" {description}"));
-                }
+                var description = result.FullDescription();
+                // Logger.Send(LogType.Information, session.UserID, string.Format("[{0} {1}] [{2:D8}] {3} Complete{4}",
+                //     session.Platform, session.Version,
+                //     (int)DateTime.Now.Subtract(start).TotalMilliseconds, parameters.ShortDescription(),
+                //     string.IsNullOrWhiteSpace(description) ? "" : $" {description}"));
 
                 return Serialization.WriteBinary(result, BinarySerializationSettings.Latest);
             }

+ 8 - 5
InABox.Server/RPC/RPCServer.cs

@@ -41,27 +41,30 @@ namespace InABox.Rpc
 
         private void Transport_OnOpen(IRpcTransport transport, RpcTransportOpenArgs e)
         {
-            OnLog?.Invoke(LogType.Information, "", $"Client Connected [{e.Session?.ID}]");
+            if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
+                OnLog?.Invoke(LogType.Information, "", $"Client Connected [{e.Session?.ID}]");
         }
 
         private void Transport_OnClose(IRpcTransport transport, RpcTransportCloseArgs e)
         {
-            OnLog?.Invoke(LogType.Information, "", $"Client Disconnected({e.Type}) [{e.Session?.ID}]");
+            if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
+                OnLog?.Invoke(LogType.Information, "", $"Client Disconnected({e.Type}) [{e.Session?.ID}]");
         }
 
         private void Transport_BeforeMessage(IRpcTransport transport, RpcTransportMessageArgs e)
         {
-            OnLog?.Invoke(LogType.Information, "", $"Request Received [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
+            //OnLog?.Invoke(LogType.Information, "", $"Request Received [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
         }
 
         private void Transport_AfterMessage(IRpcTransport transport, RpcTransportMessageArgs e)
         {
-            OnLog?.Invoke(LogType.Information, "", $"Sending Response [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
+            //OnLog?.Invoke(LogType.Information, "", $"Sending Response [{e.Session?.ID}]: {e.Message?.Command ?? "Unknown"}");
         }
 
         private void Transport_OnException(IRpcTransport transport, RpcTransportExceptionArgs e)
         {
-            OnLog?.Invoke(LogType.Error, $"", $"Exception Occurred in {e.Session?.ID}: {e.Exception.Message}");
+            if ((e.Session?.ID ?? Guid.Empty) != Guid.Empty)
+                OnLog?.Invoke(LogType.Error, $"", $"Exception Occurred in {e.Session?.ID}: {e.Exception.Message}");
         }
 
         public void Start()

+ 15 - 7
inabox.database.sqlite/SQLiteProvider.cs

@@ -2314,7 +2314,7 @@ namespace InABox.Database.SQLite
             return result;
         }
 
-        private CoreTable DoQueryNonGeneric(Type T, IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, int top = int.MaxValue, bool log = true, bool distinct = false)
+        private CoreTable DoQueryNonGeneric(Type T, IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, int top = int.MaxValue, bool log = false, bool distinct = false)
         {
             var start = DateTime.Now;
             //LogReset();
@@ -2458,7 +2458,7 @@ namespace InABox.Database.SQLite
         private CoreTable DoQuery<T>(Filter<T>? filter, Columns<T>? columns, SortOrder<T>? sort, int top, bool log, bool distinct)
             where T : Entity, new() => DoQueryNonGeneric(typeof(T), filter, columns, sort, top, log, distinct);
 
-        public CoreTable Query<T>(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool log = true, bool distinct = false) 
+        public CoreTable Query<T>(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool log = false, bool distinct = false) 
             where T : Entity, new()
         {
             var newFilter = new Filter<T>(x => x.Deleted).IsEqualTo(Guid.Empty);
@@ -2468,7 +2468,7 @@ namespace InABox.Database.SQLite
             return DoQuery(newFilter, columns, sort, top, log, distinct);
         }
         
-        public CoreTable QueryDeleted<T>(Deletion deletion, Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue)
+        public CoreTable QueryDeleted<T>(Deletion deletion, Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, int top = int.MaxValue, bool log = false)
             where T : Entity, new()
         {
             if (filter != null)
@@ -2476,7 +2476,7 @@ namespace InABox.Database.SQLite
             else
                 filter = new Filter<T>(x => x.Deleted).IsEqualTo(deletion.ID);
 
-            return DoQuery(filter, columns, sort, top, true, false);
+            return DoQuery(filter, columns, sort, top, false, false);
         }
 
         private void ReadAndDecodeValue(CoreTable result, SQLiteDataReader reader, CoreRow row, int i)
@@ -2819,7 +2819,7 @@ namespace InABox.Database.SQLite
                 DeletionData.DeletionColumns<T>(),
                 null,
                 int.MaxValue,
-                true,
+                false,
                 false
             ).Rows.First().ToObject<T>();
 
@@ -3000,9 +3000,17 @@ namespace InABox.Database.SQLite
 
                 foreach(var setNull in setNulls)
                 {
-                    var row = DoQueryNonGeneric(entityType,
+                    var row = DoQueryNonGeneric(
+                        entityType,
                         Filter.Create<Entity>(entityType, x => x.ID).IsEqualTo(setNull.EntityID),
-                        Columns.Create(entityType).Add<Entity>(x => x.ID).Add(setNull.Property)).Rows.FirstOrDefault();
+                        Columns.Create(entityType)
+                            .Add<Entity>(x => x.ID)
+                            .Add(setNull.Property),
+                        null,
+                        1,
+                        false,
+                        false
+                        ).Rows.FirstOrDefault();
                     if (row is null) continue;
 
                     var entity = (row.ToObject(entityType) as Entity)!;