import json

import base
import rest
from config import cfg

MEASURE_RETRY_COUNT = 2         #测量失败后的重测次数

SonicControllerURL = base.joinURL(cfg.get("sonic","addr"), "sonic/controller")
SonicMeasureURL = base.joinURL(cfg.get("sonic","addr"), "sonic/measure")
SonicMeasuresURL = base.joinURL(cfg.get("sonic","addr"), "sonic/measures")

class __sonicmeasurer():
    def Open(self, token):
        (hr, resp) = rest.put(SonicControllerURL, "", token)
        return hr
        
    def Close(self, token):
        (hr, resp) = rest.delete(SonicControllerURL, "", token)
        return hr
        
    def Measure(self, token):
        for i in range(0, MEASURE_RETRY_COUNT):
            (hr, resp) = rest.post(SonicMeasureURL, "", token)
            if hr:
                pos = json.loads(resp)
                distance = pos["distance"]
                return distance

        return 0
        
    def StartMeasures(self, token, looptime):
        param = json.dumps({"looptime": looptime})
        (hr, resp) = rest.put(SonicMeasuresURL, param, token)
        return hr
        
    def StopMeasures(self, token):
        (hr, resp) = rest.delete(SonicMeasuresURL, "", token)
        return hr
        
    def GetMeasuresDistance(self, token):
        (hr, resp) = rest.get(SonicMeasuresURL, token)
        if hr:
            pos = json.loads(resp)
            distance = pos["distance"]
            return distance
        
        return 0
        
        
Measurer = __sonicmeasurer()