Pārlūkot izejas kodu

Added ServerName() to RPCClientTransport
Added RPCClientWorkaround into BinarySerializationSettings to handle change to DatabaseInfo structure

Frank van den Bos 1 gadu atpakaļ
vecāks
revīzija
a084ff778f

+ 1 - 0
InABox.Client.RPC/Transports/IRPCClientTransport.cs

@@ -25,6 +25,7 @@ namespace InABox.Rpc
 
 
         bool IsConnected();
         bool IsConnected();
         bool IsSecure();
         bool IsSecure();
+        string? ServerName();
 
 
     }
     }
 }
 }

+ 1 - 0
InABox.Client.RPC/Transports/Pipe/RPCClientPipeTransport.cs

@@ -26,6 +26,7 @@ namespace InABox.Rpc
 
 
         public override bool IsConnected() => _pipe?.IsConnected == true;
         public override bool IsConnected() => _pipe?.IsConnected == true;
         public override bool IsSecure() => false;
         public override bool IsSecure() => false;
+        public override string? ServerName() => _name;
         
         
         public override void Disconnect()
         public override void Disconnect()
         {
         {

+ 1 - 0
InABox.Client.RPC/Transports/RPCClientTransport.cs

@@ -42,6 +42,7 @@ namespace InABox.Rpc
         public abstract void Connect();
         public abstract void Connect();
         public abstract bool IsConnected();
         public abstract bool IsConnected();
         public abstract bool IsSecure();
         public abstract bool IsSecure();
+        public abstract string? ServerName();
         
         
         public abstract void Send(RpcMessage message);
         public abstract void Send(RpcMessage message);
 
 

+ 2 - 0
InABox.Client.RPC/Transports/Socket/RPCClientSocketTransport.cs

@@ -104,6 +104,8 @@ namespace InABox.Rpc
 
 
         public override bool IsConnected() => _socket?.ReadyState == WebSocketState.Open;
         public override bool IsConnected() => _socket?.ReadyState == WebSocketState.Open;
         public override bool IsSecure() => _socket?.IsSecure == true;
         public override bool IsSecure() => _socket?.IsSecure == true;
+
+        public override String? ServerName() => _socket?.Url.Host;
         
         
         public override void Disconnect()
         public override void Disconnect()
         {
         {

+ 19 - 5
InABox.Core/Client/Request.cs

@@ -894,7 +894,7 @@ namespace InABox.Clients
         {
         {
             writer.Write(ColorScheme ?? "");
             writer.Write(ColorScheme ?? "");
 
 
-            if(Logo is null)
+            if (Logo is null)
             {
             {
                 writer.Write(0);
                 writer.Write(0);
             }
             }
@@ -906,9 +906,13 @@ namespace InABox.Clients
 
 
             writer.Write(Version);
             writer.Write(Version);
             writer.Write(IsHTTPS);
             writer.Write(IsHTTPS);
-            writer.Write(RestPort);
-            writer.Write(RPCPort);
+            if (String.CompareOrdinal(writer.Settings.Version, "1.1") > 0)
+            {
+                writer.Write(RestPort);
+                writer.Write(RPCPort);
+            }
         }
         }
+
         public void DeserializeBinary(CoreBinaryReader reader)
         public void DeserializeBinary(CoreBinaryReader reader)
         {
         {
             ColorScheme = reader.ReadString();
             ColorScheme = reader.ReadString();
@@ -918,8 +922,18 @@ namespace InABox.Clients
 
 
             Version = reader.ReadString();
             Version = reader.ReadString();
             IsHTTPS = reader.ReadBoolean();
             IsHTTPS = reader.ReadBoolean();
-            RestPort = reader.ReadInt32();
-            RPCPort = reader.ReadInt32();
+            if (String.CompareOrdinal(reader.Settings.Version, "1.1") > 0)
+            {
+                try
+                {
+                    RestPort = reader.ReadInt32();
+                    RPCPort = reader.ReadInt32();
+                }
+                catch (Exception e)
+                {
+                    Logger.Send(LogType.Error,"","Unable to read RestPort and RPCPort Values");
+                }
+            }
         }
         }
     }
     }
     
     

+ 26 - 3
InABox.Core/Serialization.cs

@@ -262,6 +262,16 @@ namespace InABox.Core
     /// </remarks>
     /// </remarks>
     public class BinarySerializationSettings
     public class BinarySerializationSettings
     {
     {
+        
+        /// <summary>
+        /// Should the Info() call return RPC and Rest Ports?  This is
+        /// To workaround a bug in RPCsockets that crash on large uploads
+        /// </summary>
+        /// <remarks>
+        /// True in all serialization versions >= 1.2
+        /// </remarks>
+        public bool RPCClientWorkaround { get; set; }
+        
         /// <summary>
         /// <summary>
         /// Should reference types include a flag for nullability? (Adds an extra boolean field for whether the value is null or not).
         /// Should reference types include a flag for nullability? (Adds an extra boolean field for whether the value is null or not).
         /// </summary>
         /// </summary>
@@ -269,23 +279,36 @@ namespace InABox.Core
         /// True in all serialisation versions >= 1.1.
         /// True in all serialisation versions >= 1.1.
         /// </remarks>
         /// </remarks>
         public bool IncludeNullables { get; set; }
         public bool IncludeNullables { get; set; }
+        
         public string Version { get; set; }
         public string Version { get; set; }
 
 
-        public static BinarySerializationSettings Latest => V1_1;
+        public static BinarySerializationSettings Latest => V1_2;
+        
+
 
 
         public static BinarySerializationSettings V1_0 = new BinarySerializationSettings("1.0")
         public static BinarySerializationSettings V1_0 = new BinarySerializationSettings("1.0")
         {
         {
-            IncludeNullables = false
+            IncludeNullables = false,
+            RPCClientWorkaround = false
         };
         };
+        
         public static BinarySerializationSettings V1_1 = new BinarySerializationSettings("1.1")
         public static BinarySerializationSettings V1_1 = new BinarySerializationSettings("1.1")
         {
         {
-            IncludeNullables = true
+            IncludeNullables = true,
+            RPCClientWorkaround = false
+        };
+        
+        public static BinarySerializationSettings V1_2 = new BinarySerializationSettings("1.2")
+        {
+            IncludeNullables = true,
+            RPCClientWorkaround = true
         };
         };
 
 
         public static BinarySerializationSettings ConvertVersionString(string version) => version switch
         public static BinarySerializationSettings ConvertVersionString(string version) => version switch
         {
         {
             "1.0" => V1_0,
             "1.0" => V1_0,
             "1.1" => V1_1,
             "1.1" => V1_1,
+            "1.2" => V1_2,
             _ => V1_0
             _ => V1_0
         };
         };