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 }