parseRecordArray static method
AsyncBag<IRecord?>
parseRecordArray(
- DC data,
- int offset,
- int length,
- DistributedConnection connection,
Implementation
static AsyncBag<IRecord?> parseRecordArray(
DC data, int offset, int length, DistributedConnection connection) {
var reply = new AsyncBag<IRecord?>();
if (length == 0) {
reply.seal();
return reply;
}
var end = offset + length;
var isTyped = (data[offset] & 0x10) == 0x10;
var result = (data[offset++] & 0xF);
if (isTyped) {
var classId = data.getGuid(offset);
offset += 16;
var template =
Warehouse.getTemplateByClassId(classId, TemplateType.Record);
reply.arrayType = template?.definedType;
AsyncReply<IRecord?>? previous = null;
if (result == RecordComparisonResult.Empty) {
reply.seal();
return reply;
} else if (result == RecordComparisonResult.Null) {
previous = AsyncReply<IRecord?>.ready(null);
} else if (result == RecordComparisonResult.Record ||
result == RecordComparisonResult.RecordSameType) {
var cs = data.getUint32(offset);
var recordLength = cs;
offset += 4;
previous = parseRecord(data, offset, recordLength, connection, classId);
offset += recordLength;
}
reply.add(previous as AsyncReply<IRecord?>);
while (offset < end) {
result = data[offset++];
if (result == RecordComparisonResult.Null)
previous = new AsyncReply<IRecord?>.ready(null);
else if (result == RecordComparisonResult.Record ||
result == RecordComparisonResult.RecordSameType) {
var cs = data.getUint32(offset);
offset += 4;
previous = parseRecord(data, offset, cs, connection, classId);
offset += cs;
} else if (result == RecordComparisonResult.Same) {
// do nothing
}
reply.add(previous as AsyncReply<IRecord?>);
}
} else {
AsyncReply<IRecord?>? previous = null;
Guid? classId = null;
if (result == RecordComparisonResult.Empty) {
reply.seal();
return reply;
} else if (result == RecordComparisonResult.Null)
previous = new AsyncReply<IRecord?>.ready(null);
else if (result == RecordComparisonResult.Record) {
var cs = data.getUint32(offset);
var recordLength = cs - 16;
offset += 4;
classId = data.getGuid(offset);
offset += 16;
previous = parseRecord(data, offset, recordLength, connection, classId);
offset += recordLength;
}
reply.add(previous as AsyncReply<IRecord?>);
while (offset < end) {
result = data[offset++];
if (result == RecordComparisonResult.Null)
previous = new AsyncReply<IRecord?>.ready(null);
else if (result == RecordComparisonResult.Record) {
var cs = data.getUint32(offset);
var recordLength = cs - 16;
offset += 4;
classId = data.getGuid(offset);
offset += 16;
previous =
parseRecord(data, offset, recordLength, connection, classId);
offset += recordLength;
} else if (result == RecordComparisonResult.RecordSameType) {
var cs = data.getUint32(offset);
offset += 4;
previous = parseRecord(data, offset, cs, connection, classId);
offset += cs;
} else if (result == RecordComparisonResult.Same) {
// do nothing
}
reply.add(previous as AsyncReply<IRecord?>);
}
}
reply.seal();
return reply;
// var reply = new AsyncBag();
// if (length == 0) {
// reply.seal();
// return reply;
// }
// var end = offset + length;
// var result = data[offset++];
// AsyncReply<IRecord> previous = null;
// Guid classId = null;
// if (result == RecordComparisonResult.Null)
// previous = new AsyncReply<IRecord>.ready(null);
// else if (result == RecordComparisonResult.Record) {
// int cs = data.getUint32(offset);
// int recordLength = cs - 16;
// offset += 4;
// classId = data.getGuid(offset);
// offset += 16;
// previous = parseRecord(data, offset, recordLength, connection, classId);
// offset += recordLength;
// }
// reply.add(previous);
// while (offset < end) {
// result = data[offset++];
// if (result == RecordComparisonResult.Null)
// previous = new AsyncReply<IRecord>.ready(null);
// else if (result == RecordComparisonResult.Record) {
// int cs = data.getUint32(offset);
// int recordLength = cs - 16;
// offset += 4;
// classId = data.getGuid(offset);
// offset += 16;
// previous = parseRecord(data, offset, recordLength, connection, classId);
// offset += recordLength;
// } else if (result == RecordComparisonResult.RecordSameType) {
// int cs = data.getUint32(offset);
// offset += 4;
// previous = parseRecord(data, offset, cs, connection, classId);
// offset += cs;
// } else if (result == RecordComparisonResult.Same) {
// // do nothing
// }
// reply.add(previous);
// }
// reply.seal();
// return reply;
}