00001
00002
00003
00004
00005 #ifndef xmog_remote_message_inc
00006 #define xmog_remote_message_inc
00007
00008
00009 #include "xmog.h"
00010
00011
00012 struct iovec;
00013 class xmog_java_class;
00014
00015
00022 class XMOG_DECLSPEC xmog_remote_message
00023 {
00024 public:
00025
00029 enum xmog_message_id
00030 {
00031 NONE = 0,
00032
00033 SIGN_ON = 1,
00034 SIGN_ON_STATUS = 2,
00035
00036 THREAD_ID_REQUEST = 3,
00037 THREAD_ID_ASSIGNMENT = 4,
00038
00039 THREAD_TERMINATED = 5,
00040 SESSION_TERMINATED = 6,
00041
00042 DROP_OBJECT_REFS = 7,
00043
00044 CLASS_INFO_REQUEST = 11,
00045 CLASS_INFO_RESPONSE = 12,
00046
00047 MEMBER_IDS_REQUEST = 13,
00048 MEMBER_IDS_ASSIGNMENT = 14,
00049
00050 METHOD_CALL = 15,
00051 METHOD_RETURN = 16,
00052
00053 GET_FIELD_REQUEST = 17,
00054 GET_FIELD_RESPONSE = 18,
00055
00056 SET_FIELD_REQUEST = 19,
00057 SET_FIELD_RESPONSE = 20,
00058
00059 CONSTRUCTOR_CALL = 21,
00060 CONSTRUCTOR_RETURN = 22
00061 };
00062
00066 enum xmog_signon_status
00067 {
00068 STATUS_OK = 0,
00069 STATUS_NO_NEW_SESSIONS = 1,
00070 STATUS_NOT_AUTHORIZED = 2,
00071 STATUS_SHUTTING_DOWN = 3
00072 };
00073
00074 private:
00075
00076 xmog_message_id id_;
00077
00078 void * body_;
00079
00080 void * current_;
00081
00082 public:
00083
00084 xmog_remote_message( size_t size = 512 );
00085
00086 ~xmog_remote_message();
00087
00092 int get_iovecs( iovec * vec );
00093
00101 void * body() const;
00102
00106 void prependLength();
00107
00111 void writeBoolean( bool b );
00112
00116 bool readBoolean();
00117
00121 void writeByte( jbyte b );
00122
00126 jbyte readByte();
00127
00131 void writeChar( jchar c );
00132
00136 jchar readChar();
00137
00141 void writeDouble( jdouble d );
00142
00146 jdouble readDouble();
00147
00151 void writeFloat( jfloat d );
00152
00156 jfloat readFloat();
00157
00163 void writeInt( jint i );
00164
00170 jint readInt();
00171
00177 void writeShort( jshort s );
00178
00184 jshort readShort();
00185
00196 void writeString( const char * str, size_t len = (size_t)-1 );
00197
00209 void writeString( const XMOG_WCHAR * str, size_t len = (size_t)-1 );
00210
00220 void writeUTF( const char * utf, size_t len = (size_t)-1 );
00221
00240 static xmog_remote_message * createSignOnMessage( const char * serverAppNameUTF ,
00241 const char * clientDisplayNameUTF = NULL,
00242 bool alignDataForClient = true,
00243 const char * clientSignOnNameUTF = NULL,
00244 const char * clientCredentialsUTF = NULL,
00245 int authenticationType = 0 );
00246
00251 static xmog_remote_message * createSignOffMessage();
00252
00258 static xmog_remote_message * createMemberIDsRequestMessage( xmog_java_class * _clazz );
00259
00265 static xmog_remote_message * createMessage( void * body );
00266
00270 int getMessageCode( int & code );
00271
00275 int getSignOnReplyCode( int & code );
00276
00277
00278
00279 void dump();
00280 };
00281
00282
00283 #endif