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 }