public async Task StartClientAsync() { await client.ConnectAsync(Options); // anuncia status online PayloadStatus payload = new PayloadStatus(); payload.device = DEVICE_ID; payload.status = "Online"; payload.connectedOn = DateTime.Now.ToString(); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_LOG_STATUS).Build()); var jsonPayload = PrepareMsgToBroker <PayloadStatus>(payload); await PublishMessageAsync(TOPICO_LOG_STATUS, jsonPayload); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_GATEWAY_ENTRADA).Build()); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_GATEWAY_SAIDA).Build()); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_DESODORIZACAO).Build()); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_INTERFONE).Build()); await client.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic(TOPICO_PETS).Build()); if (!client.IsConnected) { await client.ReconnectAsync(); } }
public ODocument Response(Response response) { ODocument responseDocument = new ODocument(); if (response == null) { return(responseDocument); } var reader = response.Reader; int iRead = 0; while (true) { PayloadStatus payload_status = (PayloadStatus)reader.ReadByte(); bool done = false; switch (payload_status) { case PayloadStatus.NoRemainingRecords: done = true; break; case PayloadStatus.ResultSet: ReadPrimaryResult(responseDocument, reader); break; case PayloadStatus.PreFetched: ReadAssociatedResult(reader); break; default: throw new InvalidOperationException(); } if (done) { #if DEBUG if (iRead == 0) { DumpRemaining(reader); } #endif break; } iRead++; } return(responseDocument); }
public override ODocument Response(Response response) { ODocument responseDocument = new ODocument(); if (response == null) { return(responseDocument); } var reader = response.Reader; if (response.Connection.ProtocolVersion > 26 && response.Connection.UseTokenBasedSession) { ReadToken(reader); } while (true) { PayloadStatus payload_status = (PayloadStatus)reader.ReadByte(); bool done = false; switch (payload_status) { case PayloadStatus.NoRemainingRecords: done = true; break; case PayloadStatus.ResultSet: ReadPrimaryResult(responseDocument, reader); break; case PayloadStatus.PreFetched: ReadAssociatedResult(reader); break; default: throw new InvalidOperationException(); } if (done) { break; } } return(responseDocument); }
public override ODocument Response(Response response) { ODocument responseDocument = new ODocument(); if (response == null) { return(responseDocument); } var reader = response.Reader; if (response.Connection.ProtocolVersion > 26 && response.Connection.UseTokenBasedSession) { ReadToken(reader); } // operation specific fields PayloadStatus payloadStatus = (PayloadStatus)reader.ReadByte(); responseDocument.SetField("PayloadStatus", payloadStatus); if (OperationMode == OperationMode.Asynchronous) { List <ODocument> documents = new List <ODocument>(); while (payloadStatus != PayloadStatus.NoRemainingRecords) { ODocument document = ParseDocument(reader); switch (payloadStatus) { case PayloadStatus.ResultSet: documents.Add(document); break; case PayloadStatus.PreFetched: //client cache response.Connection.Database.ClientCache[document.ORID] = document; break; default: break; } payloadStatus = (PayloadStatus)reader.ReadByte(); } responseDocument.SetField("Content", documents); } else { int contentLength; switch (payloadStatus) { case PayloadStatus.NullResult: // 'n' // nothing to do break; case PayloadStatus.SingleRecord: // 'r' ODocument document = ParseDocument(reader); responseDocument.SetField("Content", document); break; case PayloadStatus.SerializedResult: // 'a' contentLength = reader.ReadInt32EndianAware(); byte[] serializedBytes = reader.ReadBytes(contentLength); string serialized = System.Text.Encoding.UTF8.GetString(serializedBytes, 0, serializedBytes.Length); responseDocument.SetField("Content", serialized); break; case PayloadStatus.RecordCollection: // 'l' List <ODocument> documents = new List <ODocument>(); int recordsCount = reader.ReadInt32EndianAware(); for (int i = 0; i < recordsCount; i++) { documents.Add(ParseDocument(reader)); } responseDocument.SetField("Content", documents); break; case PayloadStatus.SimpleResult: //'w' ODocument sDocument = ParseDocument(reader); responseDocument.SetField("Content", sDocument["result"].ToString()); break; default: break; } if (OClient.ProtocolVersion >= 17) { //Load the fetched records in cache while ((payloadStatus = (PayloadStatus)reader.ReadByte()) != PayloadStatus.NoRemainingRecords) { ODocument document = ParseDocument(reader); if (document != null && payloadStatus == PayloadStatus.PreFetched) { //Put in the client local cache response.Connection.Database.ClientCache[document.ORID] = document; } } } } return(responseDocument); }
public ODocument Response(Response response) { // start from this position since standard fields (status, session ID) has been already parsed int offset = 5; ODocument responseDocument = new ODocument(); if (response == null) { return(responseDocument); } // operation specific fields PayloadStatus payloadStatus = (PayloadStatus)BinarySerializer.ToByte(response.Data.Skip(offset).Take(1).ToArray()); offset += 1; responseDocument.SetField("PayloadStatus", payloadStatus); if (OperationMode == OperationMode.Asynchronous) { List <ODocument> documents = new List <ODocument>(); while (payloadStatus != PayloadStatus.NoRemainingRecords) { ODocument document = ParseDocument(ref offset, response.Data); switch (payloadStatus) { case PayloadStatus.ResultSet: documents.Add(document); break; case PayloadStatus.PreFetched: // TODO: client cache documents.Add(document); break; default: break; } payloadStatus = (PayloadStatus)BinarySerializer.ToByte(response.Data.Skip(offset).Take(1).ToArray()); offset += 1; } responseDocument.SetField("Content", documents); } else { int contentLength; switch (payloadStatus) { case PayloadStatus.NullResult: // 'n' // nothing to do break; case PayloadStatus.SingleRecord: // 'r' ODocument document = ParseDocument(ref offset, response.Data); responseDocument.SetField("Content", document); break; case PayloadStatus.SerializedResult: // 'a' // TODO: how to parse result - string? contentLength = BinarySerializer.ToInt(response.Data.Skip(offset).Take(4).ToArray()); offset += 4; string serialized = BinarySerializer.ToString(response.Data.Skip(offset).Take(contentLength).ToArray()); offset += contentLength; responseDocument.SetField("Content", serialized); break; case PayloadStatus.RecordCollection: // 'l' int recordsCount = BinarySerializer.ToInt(response.Data.Skip(offset).Take(4).ToArray()); offset += 4; List <ODocument> documents = new List <ODocument>(); for (int i = 0; i < recordsCount; i++) { documents.Add(ParseDocument(ref offset, response.Data)); } responseDocument.SetField("Content", documents); break; default: break; } } return(responseDocument); }
public CommandResult <T> Execute(BinaryReader reader) { if (reader == null) { throw new ArgumentNullException($"{nameof(reader)} cannot be null."); } if (_metaData.ProtocolVersion > 26 && _metaData.UseTokenBasedSession) { ReadToken(reader); } PayloadStatus payloadStatus = (PayloadStatus)reader.ReadByte(); List <T> documents = new List <T>(); int contentLength; switch (payloadStatus) { case PayloadStatus.NullResult: // 'n' // nothing to do break; case PayloadStatus.SingleRecord: // 'r' T document = ParseDocument(reader); break; case PayloadStatus.SerializedResult: // 'a' contentLength = reader.ReadInt32EndianAware(); byte[] serializedBytes = reader.ReadBytes(contentLength); string serialized = System.Text.Encoding.UTF8.GetString(serializedBytes, 0, serializedBytes.Length); break; case PayloadStatus.RecordCollection: // 'l' int recordsCount = reader.ReadInt32EndianAware(); for (int i = 0; i < recordsCount; i++) { documents.Add(ParseDocument(reader)); } break; case PayloadStatus.SimpleResult: //'w' T sDocument = ParseDocument(reader); documents.Add(sDocument); break; default: break; } if (_metaData.ProtocolVersion >= 17) { //Load the fetched records in cache while ((payloadStatus = (PayloadStatus)reader.ReadByte()) != PayloadStatus.NoRemainingRecords) { T document = ParseDocument(reader); if (document != null && payloadStatus == PayloadStatus.PreFetched) { documents.Add(document); //Put in the client local cache //response.Connection.Database.ClientCache[document.ORID] = document; } } } return(new CommandResult <T>(documents)); }