Skip to content

Commit

Permalink
Tweaks to TCPROS to support new constants field.
Browse files Browse the repository at this point in the history
  • Loading branch information
baalexander committed Apr 15, 2012
1 parent 37486d1 commit f9255f5
Showing 1 changed file with 31 additions and 39 deletions.
70 changes: 31 additions & 39 deletions lib/tcpros.js
Expand Up @@ -192,9 +192,7 @@ function serializeMessage(message) {
}

function serializeInnerMessage(message, buffer, bufferOffset) {
var fields = message.fields;

fields.forEach(function(field) {
message.fields.forEach(function(field) {
var fieldValue = message[field.name];

if (fieldsUtil.isPrimitive(field.type)) {
Expand Down Expand Up @@ -256,48 +254,42 @@ function deserializeMessage(buffer, messageType) {
}

function deserializeInnerMessage(message, buffer, bufferOffset) {
var fields = message.fields;

fields.forEach(function(field) {
message.fields.forEach(function(field) {
var fieldValue = message[field.name];

// If the field is a constant, do not read from buffer.
if (fieldValue === null || fieldValue instanceof Object) {
if (fieldsUtil.isPrimitive(field.type)) {
fieldValue = fieldsUtil.deserializePrimitive(field.type, buffer, bufferOffset)
bufferOffset += fieldsUtil.getPrimitiveSize(field.type, fieldValue)
}
else if (fieldsUtil.isArray(field.type)) {
var array = []
, arraySize = buffer.readUInt32LE(bufferOffset)
, arrayType = fieldsUtil.getTypeOfArray(field.type)
;
bufferOffset += 4;

if (fieldsUtil.isPrimitive(field.type)) {
fieldValue = fieldsUtil.deserializePrimitive(field.type, buffer, bufferOffset)
bufferOffset += fieldsUtil.getPrimitiveSize(field.type, fieldValue)
}
else if (fieldsUtil.isArray(field.type)) {
var array = []
, arraySize = buffer.readUInt32LE(bufferOffset)
, arrayType = fieldsUtil.getTypeOfArray(field.type)
;
bufferOffset += 4;

for (var i = 0; i < arraySize; i++) {
if (fieldsUtil.isPrimitive(arrayFieldType)) {
var value = fieldsUtil.deserializePrimitive(arrayType, buffer, bufferOffset);
bufferOffset += fieldsUtil.getPrimitiveSize(arrayType, value);
array.push(value);
}
else if (fieldsUtil.isMessageType(arrayType)) {
var arrayMessage = new field.messageType();
arrayMessage = deserializeInnerMessage(arrayMessage, buffer, bufferOffset);
bufferOffset += fieldsUtil.getMessageSize(arrayMessage);
array.push(arrayMessage);
}
for (var i = 0; i < arraySize; i++) {
if (fieldsUtil.isPrimitive(arrayFieldType)) {
var value = fieldsUtil.deserializePrimitive(arrayType, buffer, bufferOffset);
bufferOffset += fieldsUtil.getPrimitiveSize(arrayType, value);
array.push(value);
}
else if (fieldsUtil.isMessageType(arrayType)) {
var arrayMessage = new field.messageType();
arrayMessage = deserializeInnerMessage(arrayMessage, buffer, bufferOffset);
bufferOffset += fieldsUtil.getMessageSize(arrayMessage);
array.push(arrayMessage);
}
fieldValue = array;
}
else if (fieldsUtil.isMessage(field.type)) {
var innerMessage = new field.messageType();
fieldValue = deserializeInnerMessage(innerMessage, buffer, bufferOffset);
bufferOffset += fieldsUtil.getMessageSize(fieldValue);
}

message[field.name] = fieldValue;
fieldValue = array;
}
else if (fieldsUtil.isMessage(field.type)) {
var innerMessage = new field.messageType();
fieldValue = deserializeInnerMessage(innerMessage, buffer, bufferOffset);
bufferOffset += fieldsUtil.getMessageSize(fieldValue);
}

message[field.name] = fieldValue;
});

return message;
Expand Down

0 comments on commit f9255f5

Please sign in to comment.