public RedisInvocation ReadInvocation(ReadOnlyMemory <byte> data) { // See WriteInvocation for the format ValidateArraySize(ref data, 2, "Invocation"); // Read excluded Ids IReadOnlyList <string> excludedConnectionIds = null; var idCount = MessagePackUtil.ReadArrayHeader(ref data); if (idCount > 0) { var ids = new string[idCount]; for (var i = 0; i < idCount; i++) { ids[i] = MessagePackUtil.ReadString(ref data); } excludedConnectionIds = ids; } // Read payload var message = ReadSerializedHubMessage(ref data); return(new RedisInvocation(message, excludedConnectionIds)); }
private static void ValidateArraySize(ref ReadOnlyMemory <byte> data, int expectedLength, string messageType) { var length = MessagePackUtil.ReadArrayHeader(ref data); if (length < expectedLength) { throw new InvalidDataException($"Insufficient items in {messageType} array."); } }
public RedisGroupCommand ReadGroupCommand(ReadOnlyMemory <byte> data) { // See WriteGroupCommand for format. ValidateArraySize(ref data, 5, "GroupCommand"); var id = MessagePackUtil.ReadInt32(ref data); var serverName = MessagePackUtil.ReadString(ref data); var action = (GroupAction)MessagePackUtil.ReadByte(ref data); var groupName = MessagePackUtil.ReadString(ref data); var connectionId = MessagePackUtil.ReadString(ref data); return(new RedisGroupCommand(id, serverName, action, groupName, connectionId)); }
public static SerializedHubMessage ReadSerializedHubMessage(ref ReadOnlyMemory <byte> data) { var count = MessagePackUtil.ReadMapHeader(ref data); var serializations = new SerializedMessage[count]; for (var i = 0; i < count; i++) { var protocol = MessagePackUtil.ReadString(ref data); var serialized = MessagePackUtil.ReadBytes(ref data); serializations[i] = new SerializedMessage(protocol, serialized); } return(new SerializedHubMessage(serializations)); }
public int ReadAck(ReadOnlyMemory <byte> data) { // See WriteAck for format ValidateArraySize(ref data, 1, "Ack"); return(MessagePackUtil.ReadInt32(ref data)); }