Mercurial > hg > FederatedLinda
view src/fdl/PSX.java @ 20:a0fd653d1121
Debug Client and Meta Engine for logging.
author | kono |
---|---|
date | Tue, 19 Aug 2008 06:26:20 +0900 |
parents | 0243987383b7 |
children | 56e015e8f5dc |
line wrap: on
line source
/* * @(#)PSXQueueInterface.java 1.1 06/04/01 * * Copyright 2006 Shinji KONO * PSX Lidna Trasport layer of PSX Linda library */ package fdl; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.CharBuffer; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; /** PSX Tuple Command Protocol Format All PSX offseted command operation should be here. */ public class PSX { static final int PSX_IN = 'i'; static final int PSX_OUT = 'o'; static final int PSX_UPDATE = 'u'; static final int PSX_RD = 'r'; static final int PSX_CHECK = 'c'; static final int PSX_REPLY = '?'; static final int PSX_WAIT_RD = 'w'; static final int PSX_ANSWER = 'a'; static final int PSX_HTTP_ANSWER = 'P'; // Put static final int PSX_HTTP_REQUEST = 'G'; // Get static final int PSX_COM_DEBUG = 'D'; //Communication DEBUG static final int LINDA_PACKET_LENGTH_OFFSET =0; static final int LINDA_MODE_OFFSET =0+4; static final int LINDA_ID_OFFSET =1+4; static final int LINDA_SEQ_OFFSET =3+4; static final int LINDA_DATA_LENGTH_OFFSET =7+4; static final int LINDA_HEADER_SIZE =12+4; static final int INT_SIZE =4; static final int SHORT_SIZE =2; static final int PRIVILEGED_ID_START = 32768; static final int PRIVILEGED_ID_END = 36864; static final int META_STOP = PRIVILEGED_ID_START; static final int META_MONITOR = PRIVILEGED_ID_START+1; static final int META_MONITOR_DATA = PRIVILEGED_ID_START+2; // this method should be removed static void setReportCommand(ByteBuffer command, String report_txt) { command.order(ByteOrder.BIG_ENDIAN); command.putInt(LINDA_PACKET_LENGTH_OFFSET,(report_txt).length()*2+LINDA_HEADER_SIZE-INT_SIZE); command.put(LINDA_MODE_OFFSET,(byte)'D'); command.putShort(LINDA_ID_OFFSET,(short) 0); command.putInt(LINDA_SEQ_OFFSET,0); command.putInt(LINDA_DATA_LENGTH_OFFSET,(report_txt).length()*2); command.rewind(); } static void printCommand(ByteBuffer command, ByteBuffer data) { char id = (char)command.getShort(LINDA_ID_OFFSET); System.out.println("LENGTH:"+command.getInt(LINDA_PACKET_LENGTH_OFFSET)+" "+ "MODE:"+(char)command.get(LINDA_MODE_OFFSET)+" "+ "ID:"+(int)id+" "+ "SEQ:"+command.getInt(LINDA_SEQ_OFFSET)+" "+ "DATA LENGTH:"+command.getInt(LINDA_DATA_LENGTH_OFFSET)+" "); System.out.println("DATA:"+data); command.rewind(); } static void printData(ByteBuffer command) { /*** print data ***/ char id = (char)command.getShort(LINDA_ID_OFFSET); System.out.println("LENGTH:"+command.getInt(LINDA_PACKET_LENGTH_OFFSET)+" "+ "MODE:"+(char)command.get(LINDA_MODE_OFFSET)+" "+ "ID:"+(int)id+" "+ "SEQ:"+command.getInt(LINDA_SEQ_OFFSET)+" "); command.rewind(); } static void setCommand(ByteBuffer command, int _mode, int _id, int _seq, int _datalen) { command = ByteBuffer.allocate(LINDA_HEADER_SIZE); command.order(ByteOrder.BIG_ENDIAN); command.putInt(LINDA_PACKET_LENGTH_OFFSET, _datalen+LINDA_HEADER_SIZE-INT_SIZE); command.put(LINDA_MODE_OFFSET,(byte)_mode); command.putShort(LINDA_ID_OFFSET,(short)_id); command.putInt(LINDA_SEQ_OFFSET,_seq); command.putInt(LINDA_DATA_LENGTH_OFFSET,_datalen); command.rewind(); } static void setAnserCommand(ByteBuffer command, int seq) { command.put(LINDA_MODE_OFFSET, (byte)'a'); command.rewind(); command.putInt(LINDA_SEQ_OFFSET, seq); command.rewind(); } public static ByteBuffer string2ByteBuffer(String log) { ByteBuffer blog = ByteBuffer.allocate(log.length()*2); // this is incorrect... for(int i=0;i<log.length();i++) { blog.putChar(log.charAt(i)); } blog.flip(); return blog; } public static String getdataString(ByteBuffer data) { String sendtext; data.rewind(); //Decode UTF-8 to System Encoding(UTF-16) Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = charset.newDecoder(); CharBuffer cb = null; try { cb = decoder.decode(data); } catch (CharacterCodingException e) { e.printStackTrace(); } cb.rewind(); sendtext = cb.toString(); return sendtext; } } /* end */