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
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