package com.easysocket.connection.iowork; import com.easysocket.config.EasySocketOptions; import com.easysocket.interfaces.config.IOptions; import com.easysocket.interfaces.conn.IConnectionManager; import com.easysocket.interfaces.conn.ISocketActionDispatch; import com.easysocket.interfaces.io.IIOManager; import com.easysocket.interfaces.io.IReader; import com.easysocket.interfaces.io.IWriter; /** * Author:Alex * Date:2019/5/28 * Note: */ public class IOManager implements IIOManager, IOptions { /** * socket行为回调 */ private ISocketActionDispatch actionDispatch; /** * 连接管理 */ private IConnectionManager connectionManager; /** * 写 */ private IWriter writer; /** * 读 */ private IReader reader; public IOManager(IConnectionManager connectionManager, ISocketActionDispatch connActionDispatch) { this.connectionManager = connectionManager; this.actionDispatch = connActionDispatch; initIO(); } // 初始化io private void initIO() { //makesureHeaderProtocolNotEmpty(); reader = new EasyReader(connectionManager, actionDispatch); // 读 writer = new EasyWriter(connectionManager, actionDispatch); // 写 } @Override public void sendBytes(byte[] bytes) { if (writer != null) writer.offer(bytes); } @Override public void startIO() { if (writer != null) writer.openWriter(); if (reader != null) reader.openReader(); } @Override public void closeIO() { if (writer != null) writer.closeWriter(); if (reader != null) reader.closeReader(); } @Override public Object setOptions(EasySocketOptions socketOptions) { //makesureHeaderProtocolNotEmpty(); if (writer != null) writer.setOption(socketOptions); if (reader != null) reader.setOption(socketOptions); return this; } @Override public EasySocketOptions getOptions() { return connectionManager.getOptions(); } /** * 确保包结构协议不为空 */ // private void makesureHeaderProtocolNotEmpty() { // IMessageProtocol protocol = connectionManager.getOptions().getMessageProtocol(); // if (protocol == null) { // throw new NoNullException("The reader protocol can not be Null."); // } // // if (protocol.getHeaderLength() == 0) { // throw new NoNullException("The header length can not be zero."); // } // } }