# HG changeset patch # User fuchita # Date 1194686018 -32400 # Node ID 6896221934375f00798b309652cbbe347fac1759 # Parent 1b05995d3118c787bac76e6614e9e817a135c849 add UTF-8 pack method -> packUConv() diff -r 1b05995d3118 -r 689622193437 rep/REPPacketSend.java --- a/rep/REPPacketSend.java Sat Nov 10 18:13:14 2007 +0900 +++ b/rep/REPPacketSend.java Sat Nov 10 18:13:38 2007 +0900 @@ -2,7 +2,12 @@ import java.io.IOException; import java.nio.ByteBuffer; +import java.nio.CharBuffer; import java.nio.channels.SocketChannel; +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; + +import remoteeditor.command.REPCommand; public class REPPacketSend { SocketChannel socketchannel; @@ -25,6 +30,33 @@ return buffer; } + public ByteBuffer packUConv(REPCommand command){ + System.out.println("send command byUTF8: " + command.toString()); + ByteBuffer buffer = ByteBuffer.allocateDirect(24+(command.string).length()*5); + 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 + buffer.putInt(pos, (buffer.position()-pos-4)); + buffer.flip(); + + return buffer; + } + public void send(REPCommand command){ try { socketchannel.write(pack(command));