From 00677aa03b85275f6d5c80970ac138bd7524b59f Mon Sep 17 00:00:00 2001 From: Ogoun Date: Mon, 4 May 2020 20:40:50 +0300 Subject: [PATCH] Refactoring --- ZeroLevel/Services/Network/ExClient.cs | 20 ++-- ZeroLevel/Services/Network/LongRequest.cs | 31 ----- ZeroLevel/Services/Network/Model/Frame.cs | 112 +++++++++++++++--- ZeroLevel/Services/Network/SocketClient.cs | 4 - ZeroLevel/Services/Semantic/Model/Symbol.cs | 24 ---- .../Services/Shedulling/TaskDispatcher.cs | 69 ----------- 6 files changed, 105 insertions(+), 155 deletions(-) delete mode 100644 ZeroLevel/Services/Network/LongRequest.cs delete mode 100644 ZeroLevel/Services/Shedulling/TaskDispatcher.cs diff --git a/ZeroLevel/Services/Network/ExClient.cs b/ZeroLevel/Services/Network/ExClient.cs index 7a4730f..8b1d99b 100644 --- a/ZeroLevel/Services/Network/ExClient.cs +++ b/ZeroLevel/Services/Network/ExClient.cs @@ -22,7 +22,7 @@ namespace ZeroLevel.Network { try { - _client.Send(Frame.FromPool(inbox)); + _client.Send(FrameFactory.Create(inbox)); return true; } catch (Exception ex) @@ -36,7 +36,7 @@ namespace ZeroLevel.Network { try { - _client.Send(Frame.FromPool(inbox, data)); + _client.Send(FrameFactory.Create(inbox, data)); return true; } catch (Exception ex) @@ -50,7 +50,7 @@ namespace ZeroLevel.Network { try { - _client.Send(Frame.FromPool(BaseSocket.DEFAULT_MESSAGE_INBOX, MessageSerializer.SerializeCompatible(message))); + _client.Send(FrameFactory.Create(BaseSocket.DEFAULT_MESSAGE_INBOX, MessageSerializer.SerializeCompatible(message))); return true; } catch (Exception ex) @@ -64,7 +64,7 @@ namespace ZeroLevel.Network { try { - _client.Send(Frame.FromPool(inbox, MessageSerializer.SerializeCompatible(message))); + _client.Send(FrameFactory.Create(inbox, MessageSerializer.SerializeCompatible(message))); return true; } catch (Exception ex) @@ -78,7 +78,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(inbox), f => callback(f)); + _client.Request(FrameFactory.Create(inbox), f => callback(f)); return true; } catch (Exception ex) @@ -92,7 +92,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(inbox, data), f => callback(f)); + _client.Request(FrameFactory.Create(inbox, data), f => callback(f)); return true; } catch (Exception ex) @@ -106,7 +106,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(inbox), f => callback(MessageSerializer.DeserializeCompatible(f))); + _client.Request(FrameFactory.Create(inbox), f => callback(MessageSerializer.DeserializeCompatible(f))); return true; } catch (Exception ex) @@ -120,7 +120,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(BaseSocket.DEFAULT_REQUEST_INBOX), f => callback(MessageSerializer.DeserializeCompatible(f))); + _client.Request(FrameFactory.Create(BaseSocket.DEFAULT_REQUEST_INBOX), f => callback(MessageSerializer.DeserializeCompatible(f))); return true; } catch (Exception ex) @@ -134,7 +134,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(inbox, MessageSerializer.SerializeCompatible(request)), + _client.Request(FrameFactory.Create(inbox, MessageSerializer.SerializeCompatible(request)), f => callback(MessageSerializer.DeserializeCompatible(f))); return true; } @@ -149,7 +149,7 @@ namespace ZeroLevel.Network { try { - _client.Request(Frame.FromPool(BaseSocket.DEFAULT_REQUEST_WITHOUT_ARGS_INBOX, MessageSerializer.SerializeCompatible(request)), + _client.Request(FrameFactory.Create(BaseSocket.DEFAULT_REQUEST_WITHOUT_ARGS_INBOX, MessageSerializer.SerializeCompatible(request)), f => callback(MessageSerializer.DeserializeCompatible(f))); return true; } diff --git a/ZeroLevel/Services/Network/LongRequest.cs b/ZeroLevel/Services/Network/LongRequest.cs deleted file mode 100644 index cc4d30d..0000000 --- a/ZeroLevel/Services/Network/LongRequest.cs +++ /dev/null @@ -1,31 +0,0 @@ -using ZeroLevel.Services.Serialization; - -namespace ZeroLevel.Services.Network -{ - public class LongRequest - : IBinarySerializable - { - public LongRequest() { } - - public LongRequest Create(T value, string inbox) => new LongRequest - { - Body = value, - Inbox = inbox - }; - - public T Body { get; set; } - public string Inbox { get; set; } - - public void Deserialize(IBinaryReader reader) - { - this.Inbox = reader.ReadString(); - this.Body = reader.ReadCompatible(); - } - - public void Serialize(IBinaryWriter writer) - { - writer.WriteString(this.Inbox); - writer.WriteCompatible(this.Body); - } - } -} diff --git a/ZeroLevel/Services/Network/Model/Frame.cs b/ZeroLevel/Services/Network/Model/Frame.cs index 2d7e4d1..ecc209c 100644 --- a/ZeroLevel/Services/Network/Model/Frame.cs +++ b/ZeroLevel/Services/Network/Model/Frame.cs @@ -7,12 +7,12 @@ using ZeroLevel.Services.Serialization; namespace ZeroLevel.Network { + /* [Serializable] [DataContract] public sealed class Frame : IEquatable, - IBinarySerializable, - ICloneable + IBinarySerializable { private static ObjectPool _pool = new ObjectPool(() => new Frame(), 256); @@ -51,21 +51,10 @@ namespace ZeroLevel.Network [DataMember] public byte[] Payload { get; set; } - public bool IsRequest { get; set; } - public Frame() { } - public Frame(Frame other) - { - var data = MessageSerializer.Serialize(other); - using (var reader = new MemoryStreamReader(data)) - { - Deserialize(reader); - } - } - public void Deserialize(IBinaryReader reader) { this.Inbox = reader.ReadString(); @@ -120,8 +109,6 @@ namespace ZeroLevel.Network if (other == null) return false; if (ReferenceEquals(this, other)) return true; - if (this.GetType() != other.GetType()) - return false; if (string.Compare(this.Inbox, other.Inbox, true) != 0) return false; if (ArrayExtensions.UnsafeEquals(this.Payload, other.Payload) == false) return false; return true; @@ -131,10 +118,101 @@ namespace ZeroLevel.Network { return base.GetHashCode(); } + } + */ + + public struct Frame : + IBinarySerializable + { + public string Inbox { get; set; } + + public byte[] Payload { get; set; } + + public void Deserialize(IBinaryReader reader) + { + this.Inbox = reader.ReadString(); + this.Payload = reader.ReadBytes(); + } + + public void Serialize(IBinaryWriter writer) + { + writer.WriteString(this.Inbox); + writer.WriteBytes(this.Payload); + } + + public T Read() + { + if (this.Payload == null || this.Payload.Length == 0) return default(T); + return MessageSerializer.DeserializeCompatible(this.Payload); + } + + public IEnumerable ReadCollection() where T : IBinarySerializable + { + return MessageSerializer.DeserializeCollection(this.Payload); + } - public object Clone() + public string ReadText() { - return new Frame(this); + if (this.Payload == null || this.Payload.Length == 0) return null; + return Encoding.UTF32.GetString(this.Payload); + } + + public void Write(T data) where T : IBinarySerializable + { + this.Payload = MessageSerializer.Serialize(data); + } + + public void Write(IEnumerable items) where T : IBinarySerializable + { + this.Payload = MessageSerializer.Serialize(items); + } + + public void Write(string data) + { + this.Payload = Encoding.UTF32.GetBytes(data); + } + + public bool Equals(Frame other) + { + if (string.Compare(this.Inbox, other.Inbox, true) != 0) return false; + if (ArrayExtensions.UnsafeEquals(this.Payload, other.Payload) == false) return false; + return true; + } + + public override int GetHashCode() + { + return base.GetHashCode(); } } + + public static class FrameFactory + { + public static Frame Create() + { + return new Frame + { + Inbox = null, + Payload = null + }; + } + + public static Frame Create(string inbox) + { + return new Frame + { + Inbox = inbox, + Payload = null + }; + } + + public static Frame Create(string inbox, byte[] payload) + { + return new Frame + { + Inbox = inbox, + Payload = payload + }; + } + } + } diff --git a/ZeroLevel/Services/Network/SocketClient.cs b/ZeroLevel/Services/Network/SocketClient.cs index ee73fc5..e695a7a 100644 --- a/ZeroLevel/Services/Network/SocketClient.cs +++ b/ZeroLevel/Services/Network/SocketClient.cs @@ -138,10 +138,8 @@ namespace ZeroLevel.Network public void Request(Frame frame, Action callback, Action fail = null) { - if (frame == null) throw new ArgumentNullException(nameof(frame)); if (Status != SocketClientStatus.Working) throw new Exception($"[SocketClient.Request] Socket status: {Status}"); var data = NetworkPacketFactory.Reqeust(MessageSerializer.Serialize(frame), out int id); - frame.Release(); if (!_send_queue.IsAddingCompleted) { @@ -160,10 +158,8 @@ namespace ZeroLevel.Network public void Send(Frame frame) { - if (frame == null) throw new ArgumentNullException(nameof(frame)); if (Status != SocketClientStatus.Working) throw new Exception($"[SocketClient.Send] Socket status: {Status}"); var data = NetworkPacketFactory.Message(MessageSerializer.Serialize(frame)); - frame.Release(); if (!_send_queue.IsAddingCompleted) { diff --git a/ZeroLevel/Services/Semantic/Model/Symbol.cs b/ZeroLevel/Services/Semantic/Model/Symbol.cs index e27921e..f422e65 100644 --- a/ZeroLevel/Services/Semantic/Model/Symbol.cs +++ b/ZeroLevel/Services/Semantic/Model/Symbol.cs @@ -58,28 +58,4 @@ namespace ZeroLevel.Services.Semantic.Model return '\0'; } } - - public class Node - { - private byte Sym; - - private Node NextSibling; - - private Node NextChild; - - public void Append(string line, int position) - { - - } - } - - public class Tree - { - private Node _root; - - public void Append(string word) - { - _root.Append(word, 0); - } - } } diff --git a/ZeroLevel/Services/Shedulling/TaskDispatcher.cs b/ZeroLevel/Services/Shedulling/TaskDispatcher.cs deleted file mode 100644 index 3951261..0000000 --- a/ZeroLevel/Services/Shedulling/TaskDispatcher.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using ZeroLevel.Services.Serialization; - -namespace ZeroLevel.Services.Shedulling -{ - public interface ITaskDb - { - long GetLastCounter(); - void Store(TaskRecord task); - } - - public class TaskRecord - { - public long Identity; - public string TypeName; - public string MethodName; - public IBinarySerializable Parameter; - - public TaskGroup Parent; - } - - public class TaskGroup - { - public long Identity; - public IEnumerable Tasks; - - public TaskPipeline Parent; - } - - public class TaskPipeline - { - public long Identity; - IEnumerable Pipeline; - - public TaskQueue Parent; - } - - public class TaskQueue - { - public long Identity; - } - - public class TaskDispatcher - { - ISheduller sheduller; - - public TaskDispatcher(ITaskDb db) - { - sheduller.SetInitialIndex(db.GetLastCounter()); - } - - private MethodInfo FindMethod(TaskRecord task) - { - var type = Type.GetType(task.TypeName); - var method = type.GetMethods().First(m => m.Name.Equals(task.MethodName, StringComparison.Ordinal)); - - - return method; - } - - public static void Add(Expression> methodCall) - { - } - } -}