507 lines
17 KiB
C++
507 lines
17 KiB
C++
#include "mqmessaging.h"
|
|
|
|
#ifdef nullptr
|
|
#undef nullptr
|
|
#endif
|
|
|
|
#define EMPTY_METHOD(name) \
|
|
void name::Populate(idMQFrame&) {} \
|
|
void name::ToFrame(idMQFrame&) {}
|
|
|
|
void AMQPConnectionStart::Populate(idMQFrame& frame) {
|
|
versionMajor = frame.ReadByte();
|
|
versionMinor = frame.ReadByte();
|
|
frame.ReadTable(serverProperties);
|
|
frame.ReadString(mechanisms);
|
|
frame.ReadString(locales);
|
|
}
|
|
void AMQPConnectionStart::ToFrame(idMQFrame& frame) {
|
|
frame.WriteByte(versionMajor);
|
|
frame.WriteByte(versionMinor);
|
|
frame.WriteTable(serverProperties);
|
|
frame.WriteString(mechanisms);
|
|
frame.WriteString(locales);
|
|
}
|
|
|
|
void AMQPConnectionStartOk::Populate(idMQFrame& frame) {
|
|
frame.ReadTable(clientProperties);
|
|
mechanism = frame.ReadShortString();
|
|
frame.ReadString(response);
|
|
locale = frame.ReadShortString();
|
|
}
|
|
void AMQPConnectionStartOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteTable(clientProperties);
|
|
frame.WriteShortString(mechanism);
|
|
frame.WriteString(response);
|
|
frame.WriteShortString(locale);
|
|
}
|
|
|
|
void AMQPConnectionSecure::Populate(idMQFrame& frame) {
|
|
frame.ReadString(challenge);
|
|
}
|
|
void AMQPConnectionSecure::ToFrame(idMQFrame& frame) {
|
|
frame.WriteString(challenge);
|
|
}
|
|
void AMQPConnectionSecureOk::Populate(idMQFrame& frame) {
|
|
frame.ReadString(response);
|
|
}
|
|
void AMQPConnectionSecureOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteString(response);
|
|
}
|
|
|
|
void AMQPConnectionTune::Populate(idMQFrame& frame) {
|
|
channelMax = frame.ReadUInt16();
|
|
frameMax = frame.ReadUInt32();
|
|
heartbeat = frame.ReadUInt16();
|
|
}
|
|
void AMQPConnectionTune::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(channelMax);
|
|
frame.WriteUInt32(frameMax);
|
|
frame.WriteUInt16(heartbeat);
|
|
}
|
|
void AMQPConnectionTuneOk::Populate(idMQFrame& frame) {
|
|
channelMax = frame.ReadUInt16();
|
|
frameMax = frame.ReadUInt32();
|
|
heartbeat = frame.ReadUInt16();
|
|
}
|
|
void AMQPConnectionTuneOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(channelMax);
|
|
frame.WriteUInt32(frameMax);
|
|
frame.WriteUInt16(heartbeat);
|
|
}
|
|
|
|
void AMQPConnectionOpen::Populate(idMQFrame& frame) {
|
|
virtualHost = frame.ReadShortString();
|
|
capabilities = frame.ReadShortString();
|
|
insist = frame.ReadBool();
|
|
}
|
|
void AMQPConnectionOpen::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(virtualHost);
|
|
frame.WriteShortString(capabilities);
|
|
frame.WriteBool(insist);
|
|
}
|
|
void AMQPConnectionOpenOk::Populate(idMQFrame& frame) {
|
|
knownHosts = frame.ReadShortString();
|
|
}
|
|
void AMQPConnectionOpenOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(knownHosts);
|
|
}
|
|
void AMQPConnectionRedirect::Populate(idMQFrame& frame) {
|
|
host = frame.ReadShortString();
|
|
knownHosts = frame.ReadShortString();
|
|
}
|
|
void AMQPConnectionRedirect::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(host);
|
|
frame.WriteShortString(knownHosts);
|
|
}
|
|
void AMQPConnectionClose::Populate(idMQFrame& frame) {
|
|
replyCode = frame.ReadUInt16();
|
|
replyText = frame.ReadShortString();
|
|
cId = frame.ReadUInt16();
|
|
mId = frame.ReadUInt16();
|
|
}
|
|
void AMQPConnectionClose::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(replyCode);
|
|
frame.WriteShortString(replyText);
|
|
frame.WriteUInt16(cId);
|
|
frame.WriteUInt16(mId);
|
|
}
|
|
EMPTY_METHOD(AMQPConnectionCloseOk)
|
|
|
|
void AMQPChannelOpen::Populate(idMQFrame& frame) {
|
|
oob = frame.ReadShortString();
|
|
}
|
|
void AMQPChannelOpen::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(oob);
|
|
}
|
|
EMPTY_METHOD(AMQPChannelOpenOk)
|
|
void AMQPChannelFlow::Populate(idMQFrame& frame) { active = frame.ReadBool(); }
|
|
void AMQPChannelFlow::ToFrame(idMQFrame& frame) { frame.WriteBool(active); }
|
|
void AMQPChannelFlowOk::Populate(idMQFrame& frame) { active = frame.ReadBool(); }
|
|
void AMQPChannelFlowOk::ToFrame(idMQFrame& frame) { frame.WriteBool(active); }
|
|
void AMQPChannelAlert::Populate(idMQFrame& frame) {
|
|
replyCode = frame.ReadUInt16();
|
|
replyText = frame.ReadShortString();
|
|
frame.ReadTable(details);
|
|
}
|
|
void AMQPChannelAlert::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(replyCode);
|
|
frame.WriteShortString(replyText);
|
|
frame.WriteTable(details);
|
|
}
|
|
void AMQPChannelClose::Populate(idMQFrame& frame) {
|
|
replyCode = frame.ReadUInt16();
|
|
replyText = frame.ReadShortString();
|
|
cId = frame.ReadUInt16();
|
|
mId = frame.ReadUInt16();
|
|
}
|
|
void AMQPChannelClose::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(replyCode);
|
|
frame.WriteShortString(replyText);
|
|
frame.WriteUInt16(cId);
|
|
frame.WriteUInt16(mId);
|
|
}
|
|
EMPTY_METHOD(AMQPChannelCloseOk)
|
|
|
|
void AMQPExchangeDeclare::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
exchange = frame.ReadShortString();
|
|
type = frame.ReadShortString();
|
|
passive = frame.ReadBool();
|
|
durable = frame.ReadBool();
|
|
autoDelete = frame.ReadBool();
|
|
isInternal = frame.ReadBool();
|
|
noWait = frame.ReadBool();
|
|
frame.ReadTable(arguments);
|
|
}
|
|
void AMQPExchangeDeclare::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(type);
|
|
frame.WriteBool(passive);
|
|
frame.WriteBool(durable);
|
|
frame.WriteBool(autoDelete);
|
|
frame.WriteBool(isInternal);
|
|
frame.WriteBool(noWait);
|
|
frame.WriteTable(arguments);
|
|
}
|
|
EMPTY_METHOD(AMQPExchangeDeclareOk)
|
|
void AMQPExchangeDelete::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
exchange = frame.ReadShortString();
|
|
unused = frame.ReadBool();
|
|
noWait = frame.ReadBool();
|
|
}
|
|
void AMQPExchangeDelete::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteBool(unused);
|
|
frame.WriteBool(noWait);
|
|
}
|
|
EMPTY_METHOD(AMQPExchangeDeleteOk)
|
|
|
|
void AMQPQueueDeclare::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
passive = frame.ReadBool();
|
|
durable = frame.ReadBool();
|
|
exclusive = frame.ReadBool();
|
|
autoDelete = frame.ReadBool();
|
|
noWait = frame.ReadBool();
|
|
frame.ReadTable(arguments);
|
|
}
|
|
void AMQPQueueDeclare::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteBool(passive);
|
|
frame.WriteBool(durable);
|
|
frame.WriteBool(exclusive);
|
|
frame.WriteBool(autoDelete);
|
|
frame.WriteBool(noWait);
|
|
frame.WriteTable(arguments);
|
|
}
|
|
void AMQPQueueDeclareOk::Populate(idMQFrame& frame) {
|
|
queue = frame.ReadShortString();
|
|
messageCount = frame.ReadUInt32();
|
|
consumerCount = frame.ReadUInt32();
|
|
}
|
|
void AMQPQueueDeclareOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(queue);
|
|
frame.WriteUInt32(messageCount);
|
|
frame.WriteUInt32(consumerCount);
|
|
}
|
|
void AMQPQueueBind::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
noWait = frame.ReadBool();
|
|
frame.ReadTable(arguments);
|
|
}
|
|
void AMQPQueueBind::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
frame.WriteBool(noWait);
|
|
frame.WriteTable(arguments);
|
|
}
|
|
EMPTY_METHOD(AMQPQueueBindOk)
|
|
void AMQPQueueUnbind::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
frame.ReadTable(arguments);
|
|
}
|
|
void AMQPQueueUnbind::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
frame.WriteTable(arguments);
|
|
}
|
|
EMPTY_METHOD(AMQPQueueUnbindOk)
|
|
void AMQPQueuePurge::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
noWait = frame.ReadBool();
|
|
}
|
|
void AMQPQueuePurge::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteBool(noWait);
|
|
}
|
|
void AMQPQueuePurgeOk::Populate(idMQFrame& frame) {
|
|
messageCount = frame.ReadUInt32();
|
|
}
|
|
void AMQPQueuePurgeOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt32(messageCount);
|
|
}
|
|
void AMQPQueueDelete::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
unused = frame.ReadBool();
|
|
empty = frame.ReadBool();
|
|
noWait = frame.ReadBool();
|
|
}
|
|
void AMQPQueueDelete::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteBool(unused);
|
|
frame.WriteBool(empty);
|
|
frame.WriteBool(noWait);
|
|
}
|
|
void AMQPQueueDeleteOk::Populate(idMQFrame& frame) {
|
|
messageCount = frame.ReadUInt32();
|
|
}
|
|
void AMQPQueueDeleteOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt32(messageCount);
|
|
}
|
|
|
|
void AMQPBasicQos::Populate(idMQFrame& frame) {
|
|
prefetchSize = frame.ReadUInt32();
|
|
prefetchCount = frame.ReadUInt16();
|
|
isGlobal = frame.ReadBool();
|
|
}
|
|
void AMQPBasicQos::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt32(prefetchSize);
|
|
frame.WriteUInt16(prefetchCount);
|
|
frame.WriteBool(isGlobal);
|
|
}
|
|
EMPTY_METHOD(AMQPBasicQosOk)
|
|
void AMQPBasicConsume::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
consumerTag = frame.ReadShortString();
|
|
noLocal = frame.ReadBool();
|
|
noAck = frame.ReadBool();
|
|
exclusive = frame.ReadBool();
|
|
noWait = frame.ReadBool();
|
|
}
|
|
void AMQPBasicConsume::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteShortString(consumerTag);
|
|
frame.WriteBool(noLocal);
|
|
frame.WriteBool(noAck);
|
|
frame.WriteBool(exclusive);
|
|
frame.WriteBool(noWait);
|
|
}
|
|
void AMQPBasicConsumeOk::Populate(idMQFrame& frame) {
|
|
consumerTag = frame.ReadShortString();
|
|
}
|
|
void AMQPBasicConsumeOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(consumerTag);
|
|
}
|
|
void AMQPBasicCancel::Populate(idMQFrame& frame) {
|
|
consumerTag = frame.ReadShortString();
|
|
noWait = frame.ReadBool();
|
|
}
|
|
void AMQPBasicCancel::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(consumerTag);
|
|
frame.WriteBool(noWait);
|
|
}
|
|
void AMQPBasicCancelOk::Populate(idMQFrame& frame) {
|
|
consumerTag = frame.ReadShortString();
|
|
}
|
|
void AMQPBasicCancelOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(consumerTag);
|
|
}
|
|
void AMQPBasicPublish::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
mandatory = frame.ReadBool();
|
|
immediate = frame.ReadBool();
|
|
}
|
|
void AMQPBasicPublish::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
frame.WriteBool(mandatory);
|
|
frame.WriteBool(immediate);
|
|
}
|
|
void AMQPBasicReturn::Populate(idMQFrame& frame) {
|
|
replyCode = frame.ReadUInt16();
|
|
replyText = frame.ReadShortString();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
}
|
|
void AMQPBasicReturn::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(replyCode);
|
|
frame.WriteShortString(replyText);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
}
|
|
void AMQPBasicDeliver::Populate(idMQFrame& frame) {
|
|
consumerTag = frame.ReadShortString();
|
|
deliveryTag = frame.ReadUInt64();
|
|
redelivered = frame.ReadBool();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
}
|
|
void AMQPBasicDeliver::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(consumerTag);
|
|
frame.WriteUInt64(deliveryTag);
|
|
frame.WriteBool(redelivered);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
}
|
|
void AMQPBasicGet::Populate(idMQFrame& frame) {
|
|
ticket = frame.ReadUInt16();
|
|
queue = frame.ReadShortString();
|
|
noAck = frame.ReadBool();
|
|
}
|
|
void AMQPBasicGet::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt16(ticket);
|
|
frame.WriteShortString(queue);
|
|
frame.WriteBool(noAck);
|
|
}
|
|
void AMQPBasicGetOk::Populate(idMQFrame& frame) {
|
|
deliveryTag = frame.ReadUInt64();
|
|
redelivered = frame.ReadBool();
|
|
exchange = frame.ReadShortString();
|
|
routingKey = frame.ReadShortString();
|
|
messageCount = frame.ReadUInt32();
|
|
}
|
|
void AMQPBasicGetOk::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt64(deliveryTag);
|
|
frame.WriteBool(redelivered);
|
|
frame.WriteShortString(exchange);
|
|
frame.WriteShortString(routingKey);
|
|
frame.WriteUInt32(messageCount);
|
|
}
|
|
void AMQPBasicGetEmpty::Populate(idMQFrame& frame) {
|
|
clusterId = frame.ReadShortString();
|
|
}
|
|
void AMQPBasicGetEmpty::ToFrame(idMQFrame& frame) {
|
|
frame.WriteShortString(clusterId);
|
|
}
|
|
void AMQPBasicAck::Populate(idMQFrame& frame) {
|
|
deliveryTag = frame.ReadUInt64();
|
|
multiple = frame.ReadBool();
|
|
}
|
|
void AMQPBasicAck::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt64(deliveryTag);
|
|
frame.WriteBool(multiple);
|
|
}
|
|
void AMQPBasicReject::Populate(idMQFrame& frame) {
|
|
deliveryTag = frame.ReadUInt64();
|
|
requeue = frame.ReadBool();
|
|
}
|
|
void AMQPBasicReject::ToFrame(idMQFrame& frame) {
|
|
frame.WriteUInt64(deliveryTag);
|
|
frame.WriteBool(requeue);
|
|
}
|
|
void AMQPBasicRecoverAsync::Populate(idMQFrame& frame) {
|
|
requeue = frame.ReadBool();
|
|
}
|
|
void AMQPBasicRecoverAsync::ToFrame(idMQFrame& frame) {
|
|
frame.WriteBool(requeue);
|
|
}
|
|
void AMQPBasicRecover::Populate(idMQFrame& frame) {
|
|
requeue = frame.ReadBool();
|
|
}
|
|
void AMQPBasicRecover::ToFrame(idMQFrame& frame) {
|
|
frame.WriteBool(requeue);
|
|
}
|
|
EMPTY_METHOD(AMQPBasicRecoverOk)
|
|
|
|
AMQPBasicProperties::AMQPBasicProperties()
|
|
: idMQContentHeader(), contentType(), contentEncoding(), headers(),
|
|
deliveryMode(0), priority(0), correlationId(), replyTo(), expiration(),
|
|
messageId(), timestamp(0), type(), userId(), appId(), clusterId(),
|
|
b_contentType(false), b_contentEncoding(false), b_headers(false),
|
|
b_deliveryMode(false), b_priority(false), b_correlationId(false),
|
|
b_replyTo(false), b_expiration(false), b_messageId(false),
|
|
b_timestamp(false), b_type(false), b_userId(false), b_appId(false),
|
|
b_clusterId(false) {
|
|
}
|
|
|
|
void AMQPBasicProperties::Populate(idMQFrame& frame) {
|
|
b_contentType = frame.ReadPropertyPresence();
|
|
b_contentEncoding = frame.ReadPropertyPresence();
|
|
b_headers = frame.ReadPropertyPresence();
|
|
b_deliveryMode = frame.ReadPropertyPresence();
|
|
b_priority = frame.ReadPropertyPresence();
|
|
b_correlationId = frame.ReadPropertyPresence();
|
|
b_replyTo = frame.ReadPropertyPresence();
|
|
b_expiration = frame.ReadPropertyPresence();
|
|
b_messageId = frame.ReadPropertyPresence();
|
|
b_timestamp = frame.ReadPropertyPresence();
|
|
b_type = frame.ReadPropertyPresence();
|
|
b_userId = frame.ReadPropertyPresence();
|
|
b_appId = frame.ReadPropertyPresence();
|
|
b_clusterId = frame.ReadPropertyPresence();
|
|
frame.FinalizeReadPresence();
|
|
if (b_contentType) contentType = frame.ReadShortString();
|
|
if (b_contentEncoding) contentEncoding = frame.ReadShortString();
|
|
if (b_headers) frame.ReadTable(headers);
|
|
if (b_deliveryMode) deliveryMode = frame.ReadByte();
|
|
if (b_priority) priority = frame.ReadByte();
|
|
if (b_correlationId) correlationId = frame.ReadShortString();
|
|
if (b_replyTo) replyTo = frame.ReadShortString();
|
|
if (b_expiration) expiration = frame.ReadShortString();
|
|
if (b_messageId) messageId = frame.ReadShortString();
|
|
if (b_timestamp) timestamp = frame.ReadUInt64();
|
|
if (b_type) type = frame.ReadShortString();
|
|
if (b_userId) userId = frame.ReadShortString();
|
|
if (b_appId) appId = frame.ReadShortString();
|
|
if (b_clusterId) clusterId = frame.ReadShortString();
|
|
}
|
|
|
|
void AMQPBasicProperties::ToFrame(idMQFrame& frame) {
|
|
frame.WritePropertyPresence(b_contentType);
|
|
frame.WritePropertyPresence(b_contentEncoding);
|
|
frame.WritePropertyPresence(b_headers);
|
|
frame.WritePropertyPresence(b_deliveryMode);
|
|
frame.WritePropertyPresence(b_priority);
|
|
frame.WritePropertyPresence(b_correlationId);
|
|
frame.WritePropertyPresence(b_replyTo);
|
|
frame.WritePropertyPresence(b_expiration);
|
|
frame.WritePropertyPresence(b_messageId);
|
|
frame.WritePropertyPresence(b_timestamp);
|
|
frame.WritePropertyPresence(b_type);
|
|
frame.WritePropertyPresence(b_userId);
|
|
frame.WritePropertyPresence(b_appId);
|
|
frame.WritePropertyPresence(b_clusterId);
|
|
frame.FinalizeWritePresence();
|
|
if (b_contentType) frame.WriteShortString(contentType);
|
|
if (b_contentEncoding) frame.WriteShortString(contentEncoding);
|
|
if (b_headers) frame.WriteTable(headers);
|
|
if (b_deliveryMode) frame.WriteByte(deliveryMode);
|
|
if (b_priority) frame.WriteByte(priority);
|
|
if (b_correlationId) frame.WriteShortString(correlationId);
|
|
if (b_replyTo) frame.WriteShortString(replyTo);
|
|
if (b_expiration) frame.WriteShortString(expiration);
|
|
if (b_messageId) frame.WriteShortString(messageId);
|
|
if (b_timestamp) frame.WriteUInt64(timestamp);
|
|
if (b_type) frame.WriteShortString(type);
|
|
if (b_userId) frame.WriteShortString(userId);
|
|
if (b_appId) frame.WriteShortString(appId);
|
|
if (b_clusterId) frame.WriteShortString(clusterId);
|
|
}
|
|
|
|
#undef EMPTY_METHOD
|