#coding:utf-8


#!/usr/bin/python3

import json

import os

import binascii

import asn1tools

import sys

import paho.mqtt.client as mqtt

import requests

import logging

from enum import Enum

from queue import Queue

class MQTTClient:

def __init__(self,host, port, qos, timeout, log):
    self.host = host
    self.port = port
    self.qos = qos
    self.queue = Queue()
    self.mqtt_client = None
    self.timeout = timeout
    self.log = log

def on_message(self, client, userdata, msg):
    self.log.debug('get a message: %s' % msg)
    self.queue.put(msg)

def subscribe(self, topic):
    self.mqtt_client.subscribe(topic, self.qos)
    self.log.debug('subscribe to %s' % topic)

def unsubscribe(self, topic):
    self.mqtt_client.unsubscribe(topic)
    self.log.debug('unsubscribe %s' % topic)

def receive_msg(self, timeout=None):
    self.log.debug('waiting for message.')
    if timeout is None:
    timeout = self.timeout
    return self.queue.get(timeout=timeout)

def publish(self, topic, blob):
    self.mqtt_client.publish(topic, blob)

def loop_start(self):
    if self.mqtt_client is None:
    self.mqtt_client = mqtt.Client()
    self.mqtt_client.on_message = self.on_message
    self.mqtt_client.connect(self.host, self.port, self.timeout)
    self.mqtt_client.loop_start()

def loop_stop(self):
    if self.mqtt_client is not None:
    self.mqtt_client.loop_stop()
    self.mqtt_client.disconnect()
    self.mqtt_client = None