1 module hunt.http.codec.CommonEncoder;
2 
3 import hunt.net.OutputEntry;
4 import hunt.net.AbstractConnection;
5 import hunt.net.EncoderChain;
6 import hunt.net.Session;
7 
8 import hunt.lang.exception;
9 import hunt.util.functional;
10 
11 import hunt.container.ByteBuffer;
12 import hunt.logging;
13 
14 /**
15  * 
16  */
17 class CommonEncoder : EncoderChain 
18 {
19     void encode(Object message, Session session) {
20         Object attachment = session.getAttachment();
21         auto messageTypeInfo = typeid(message);
22 
23         version(HUNT_DEBUG) {
24             tracef("encoding... message: %s", messageTypeInfo.name);
25             tracef("Session attachment: %s", typeid(attachment).name);
26         }
27         AbstractConnection connection = cast(AbstractConnection) attachment;
28         assert(connection !is null, "Bad object");
29 
30         if (connection.isEncrypted()) {
31 
32             ByteBuffer messageBuffer = cast(ByteBuffer) message;
33             if(messageBuffer !is null) {
34                 connection.encrypt(messageBuffer);
35             // } else if (message instanceof ByteBuffer[]) {
36             //     connection.encrypt(cast(ByteBuffer[]) message);
37             } else {
38 
39                 ByteBufferOutputEntry entry = cast(ByteBufferOutputEntry) message;
40                 if (entry !is null)  {
41                     connection.encrypt(cast(ByteBufferOutputEntry) message);
42                 // } else if (message instanceof ByteBufferArrayOutputEntry) {
43                 //     connection.encrypt(cast(ByteBufferArrayOutputEntry) message);
44                 } else {
45                     throw new IllegalArgumentException("the encoder object type error: " ~ messageTypeInfo.toString());
46                 }
47             }
48         } else {
49             // if (messageTypeInfo == typeid(ByteBuffer)) 
50             ByteBuffer messageBuffer = cast(ByteBuffer) message;
51             if(messageBuffer !is null) {
52                 session.write(messageBuffer, Callback.NOOP);
53             // } else if (messageTypeInfo == typeid(ByteBuffer[])) {
54             //     session.write(cast(ByteBuffer[]) message, Callback.NOOP);
55             } else { 
56                 ByteBufferOutputEntry entry = cast(ByteBufferOutputEntry) message;
57                 if (entry !is null) 
58                     session.write(entry.getData(), entry.getCallback());
59             // } else if (message instanceof ByteBufferArrayOutputEntry) {
60             //     session.write(cast(ByteBufferArrayOutputEntry) message);
61                 else {
62                     throw new IllegalArgumentException("the encoder object type error: " ~ messageTypeInfo.toString());
63                 }
64             } 
65         }
66     }
67 }