Пример #1
0
 def _insertLocation(gpsinfo, wsdbpool, imei, timestamp, issleep):
     if gpsinfo != '0,0':
         gpsinfo = str(gpsinfo).split(',')
         return insertLocationSql(wsdbpool, imei, gpsinfo[0], gpsinfo[1], timestamp, issleep, 'b')
     else:
         d = defer.Deferred()
         d.callback(failure.Failure(Exception('illegal result, cannot get gpsinfo by bsinfo ')))
         return d
Пример #2
0
def insertLocation(httpagent, wsdbpool, message):
    def _getGpsinfoCallback(wsinfo, imei, lac, cid, signal, timestamp):
        try:
            imsi = wsinfo[0][1]
            mcc = imsi[0:3]
            mnc = imsi[3:5]
            #return threads.deferToThread(getLocationByBsinfo, mcc, mnc, imei, imsi, lac, cid, signal, timestamp)
            return getLocationByBsinfoAsync(httpagent, mcc, mnc, imei, imsi, lac, cid, signal).addCallback(readBody).addCallback(_httpBodyToGpsinfo, (mcc, mnc, imei, imsi, lac, cid, signal))
        except Exception as e:
            d = defer.Deferred()
            if len(wsinfo) == 0:
                d.errback(failure.Failure(Exception('cannot read imsi of the simcard in this stick' )))
            else:
                d.errback(failure.Failure(e))
            return d

    def _insertLocation(gpsinfo, wsdbpool, imei, timestamp, issleep):
        if gpsinfo != '0,0':
            gpsinfo = str(gpsinfo).split(',')
            return insertLocationSql(wsdbpool, imei, gpsinfo[0], gpsinfo[1], timestamp, issleep, 'b')
        else:
            d = defer.Deferred()
            d.callback(failure.Failure(Exception('illegal result, cannot get gpsinfo by bsinfo ')))
            return d

    if message[0] == '3':
        #old format
        gpsMsg = GpsMessageOldVer(message)
        if gpsMsg.longitude == 0 or gpsMsg.latitude == 0:
            d = selectWsinfoSql(wsdbpool, gpsMsg.imei).addCallback(_getGpsinfoCallback, gpsMsg.imei, gpsMsg.baseStationInfo.lac, gpsMsg.baseStationInfo.cid, gpsMsg.baseStationInfo.signal, gpsMsg.timestamp).addCallback(_insertLocation, wsdbpool, gpsMsg.imei, gpsMsg.timestamp, gpsMsg.issleep)
        else:
            d = insertLocationSql(wsdbpool, gpsMsg.imei, gpsMsg.longitude, gpsMsg.latitude,  gpsMsg.timestamp, gpsMsg.issleep)

    elif message[0] == 'a':
        #new format
        gpsMsg = GpsMessage(message)
        log.msg(str(vars(gpsMsg)))
        if gpsMsg.longitude == 0 or gpsMsg.latitude == 0:
            #d = getLocationFromMinigpsAsync(httpagent, gpsMsg.mcc, gpsMsg.mnc, gpsMsg.baseStationInfos).addCallback(readBody).addCallback(decodeMinigpsResult, (gpsMsg.mcc, gpsMsg.mnc, gpsMsg.baseStationInfos)).addCallback(_insertLocation, wsdbpool, gpsMsg.imei, gpsMsg.timestamp, gpsMsg.issleep)
            d = selectWsinfoSql(wsdbpool, gpsMsg.imei).addCallback(_getGpsinfoCallback, gpsMsg.imei, gpsMsg.mainLac, gpsMsg.mainCid, gpsMsg.mainSignal, gpsMsg.timestamp).addCallback(_insertLocation, wsdbpool, gpsMsg.imei, gpsMsg.timestamp, gpsMsg.issleep)
        else:
            d = insertLocationSql(wsdbpool, gpsMsg.imei, gpsMsg.longitude, gpsMsg.latitude,  gpsMsg.timestamp, gpsMsg.issleep)

    #same operation for both old format msg and new format msg
    d.addCallback(insertBatteryLevel, wsdbpool, gpsMsg.imei, gpsMsg.batteryLevel, gpsMsg.charging, gpsMsg.timestamp)
    return d