紧接下来,就是字符串转换,我觉得这个倒算个工具函数
void string2wstring( std::wstring & dest, const std::string &src )
{
dest.resize( src.size() );
for( std::string::size_type i = 0; i < src.size(); i++ )
dest[i] = static_cast<unsigned char> ( src[i] );
}
char * string2hlaStringBytes( const std::wstring& s, unsigned int &retlen )
{
const unsigned int slen = s.size();
unsigned char sizeBytes[4];
sizeBytes[3] = ( unsigned char ) ( ( slen & 0x000000FF ) >> 0 );
sizeBytes[2] = ( unsigned char ) ( ( slen & 0x0000FF00 ) >> 8 );
sizeBytes[1] = ( unsigned char ) ( ( slen & 0x00FF0000 ) >> 16 );
sizeBytes[0] = ( unsigned char ) ( ( slen & 0xFF000000 ) >> 24 );
unsigned char * characters = new unsigned char[slen * 2];
for( int i = 0; i < slen; i++ )
{
unsigned short v = s.at( i );
characters[i*2] = ( unsigned char ) ( ( v & 0xFF00 ) >> 8 );
characters[i*2+1] = ( unsigned char ) ( ( v & 0x00FF ) >> 0 );
}
int nofXtraUnicodes = slen % 2;
unsigned int hlaStringBytesLen = 4 + slen * 2 + nofXtraUnicodes;
char * hlaStringBytes = new char[hlaStringBytesLen];
for( int k = 0; k < 4; k++ )
{
hlaStringBytes[k] = sizeBytes[k];
}
for( int n = 0; n < slen * 2; n++ )
{
hlaStringBytes[n+4] = characters[n];
}
for( int m = 0; m < nofXtraUnicodes * 2; m++ )
{
hlaStringBytes[4+2*slen+m] = 0;
}
retlen = hlaStringBytesLen;
delete characters;
return hlaStringBytes;
}
std::wstring hlaStringBytes2string( const char * hlaStringBytes )
{
unsigned int hlaStringSize = hlaStringBytes[3] +
( ( unsigned int ) hlaStringBytes[2] << 8 ) +
( ( unsigned int ) hlaStringBytes[1] << 16 ) +
( ( unsigned int ) hlaStringBytes[0] << 24 );
wchar_t * textChars = new wchar_t[hlaStringSize+1];
textChars[hlaStringSize] = ( wchar_t ) L'\0';
for( int i = 0; i < hlaStringSize; i++ )
{
unsigned int hi = ( unsigned char ) hlaStringBytes[4+i*2];
unsigned int lo = ( unsigned char ) hlaStringBytes[4*+i*2+1];
wchar_t c = ( ( hi << 8 ) + ( lo << 0 ) );
textChars[i] = c;
}
std::wstring decodedString( textChars );
delete [] textChars;
return decodedString;
}
再往下,用到了基类BaseFederateAmbassador
class ChatCCFederate : public BaseFederateAmbassador
{
public:
ChatCCFederate()
{
}
};
而BaseFederateAmbassador类派生自基类RTI:: FederateAmbassador
using namespace RTI;
class RTI_EXPORT BaseFederateAmbassador : public FederateAmbassador
{
};
类里面具体定义了对于联邦管理等各项内容(虽然在本例子中都为空),应该是联邦成员类。