1 /* 2 * MsgTrans - Message Transport Framework for DLang. Based on TCP, WebSocket, UDP transmission protocol. 3 * 4 * Copyright (C) 2019 HuntLabs 5 * 6 * Website: https://www.msgtrans.org 7 * 8 * Licensed under the Apache-2.0 License. 9 * 10 */ 11 12 module msgtrans.MessageTransport; 13 14 import msgtrans.MessageTransport; 15 import msgtrans.SessionManager; 16 import msgtrans.executor.Executor; 17 import msgtrans.executor.ExecutorInfo; 18 19 import hunt.Exceptions; 20 import hunt.logging.ConsoleLogger; 21 22 import std.format; 23 24 25 enum SERVER_NAME_PREFIX = "SERVER-"; 26 enum CLIENT_NAME_PREFIX = "CLIENT-"; 27 28 /** 29 * 30 */ 31 abstract class MessageTransport { 32 private string _name; 33 private ExecutorInfo[uint] _executors; 34 35 this(string name) { 36 _name = name; 37 38 ExecutorInfo[] executors = Executor.getExecutors(_name); 39 foreach(ExecutorInfo e; executors) { 40 _executors[e.messageId()] = e; 41 } 42 } 43 44 string name() { 45 return _name; 46 } 47 48 ExecutorInfo getExecutor(uint id) { 49 auto itemPtr = id in _executors; 50 if(itemPtr is null) { 51 string msg = format("Can't find executor %d in server %s", id, _name); 52 version(HUNT_DEBUG) warning(msg); 53 // throw new NoSuchElementException(msg); 54 return ExecutorInfo.init; 55 } 56 return *itemPtr; 57 } 58 59 SessionManager sessionManager() { return null; } 60 } 61 62 /** 63 * 64 */ 65 struct TransportServer { 66 enum NAME_PREFIX = "SERVER-"; 67 string name; 68 } 69 70 /** 71 * 72 */ 73 struct TransportClient { 74 enum NAME_PREFIX = "CLIENT-"; 75 string name; 76 }