Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }