Mercurial > hg > RemoteEditor > REPSessionManager
view rep/channel/REPPacketSend.java @ 147:4ff68518e9ca
*** empty log message ***
author | kent |
---|---|
date | Wed, 27 Aug 2008 23:38:21 +0900 |
parents | |
children |
line wrap: on
line source
package rep.channel; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; import rep.REPCommand; import rep.channel.REPPack; public class REPPacketSend implements REPPack<REPCommand> { REPSocketChannel<REPCommand> socketchannel; // JIS/S-JIS = 2, UTF-8 = 3, UTF-?? = 5 final int CHAR_ORDER = 5; public REPPacketSend(REPSocketChannel<REPCommand> channel){ socketchannel = channel; } /* (non-Javadoc) * @see rep.REPPack#packUConv(rep.REPCommand) */ public ByteBuffer packUConv(REPCommand command){ System.out.println("send command byUTF8: " + command.toString()); if(command.string == null){ command.setString("test"); } ByteBuffer buffer = ByteBuffer.allocateDirect(24+(command.string.length()*CHAR_ORDER)); buffer.clear(); // position = 0 buffer.putInt(command.cmd); buffer.putInt(command.sid); buffer.putInt(command.eid); buffer.putInt(command.seq); buffer.putInt(command.lineno); int pos = buffer.position(); buffer.putInt(0); //Encode to UTF8 CharBuffer cb = CharBuffer.wrap(command.string); Charset charset = Charset.forName("UTF-8"); CharsetEncoder encoder = charset.newEncoder(); try { encoder.encode(cb, buffer, true); } catch (IllegalStateException e) { e.printStackTrace(); } //Encoded string length set int length = (buffer.position() -pos) -4; System.out.println("UTF-8: Set REPComand textlen(Byte) : " + (buffer.position() - pos-4)); if(length < 0) { length = 0; } buffer.putInt(pos, length); buffer.limit(24+length); buffer.rewind(); return buffer; } /* (non-Javadoc) * @see rep.REPPack#send(rep.REPCommand) */ public void send(REPCommand command){ try { //socketchannel.write(pack(command)); socketchannel.write(packUConv(command)); //System.out.println(command.toString()); } catch (IOException e) { e.printStackTrace(); } } }