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.channel.tcp.TcpTransportSession; 13 14 import msgtrans.Packet; 15 import msgtrans.MessageBuffer; 16 import msgtrans.channel.TransportSession; 17 import msgtrans.ee2e.message.MsgDefine; 18 import msgtrans.ee2e.crypto; 19 import msgtrans.ee2e.common; 20 import msgtrans.MessageTransportServer; 21 import hunt.net; 22 import hunt.String; 23 24 import std.stdio; 25 import std.array; 26 27 /** 28 * 29 */ 30 class TcpTransportSession : TransportSession { 31 private Connection _conn = null; 32 33 this(long id, Connection connection) { 34 _conn = connection; 35 super(id); 36 } 37 38 override Object getAttribute(string key) { 39 return _conn.getAttribute(key); 40 } 41 42 override void setAttribute(string key, Object value) { 43 _conn.setAttribute(key, value); 44 } 45 46 override bool containsAttribute(string key) { 47 return _conn.containsAttribute(key); 48 } 49 50 51 override void send(MessageBuffer message) { 52 if (_conn.isConnected()) { 53 54 if (MessageTransportServer.isEE2E && (message.id != MESSAGE.INITIATE && message.id != MESSAGE.FINALIZE)) 55 { 56 peerkey_s peerkeys = cast(peerkey_s)(getAttribute("EE2E")); 57 message = common.encrypted_encode(message,null, peerkeys); 58 } 59 60 ubyte[][] buffers = Packet.encode(message); 61 foreach(ubyte[] data; buffers) { 62 _conn.write(data); 63 //writefln("data : %s",data); 64 } 65 } 66 } 67 68 override void close() { 69 if (_conn !is null && _conn.getState() !is ConnectionState.Closed) { 70 _conn.close(); 71 } 72 } 73 74 override bool isConnected() { 75 return _conn.isConnected(); 76 } 77 }