Skip to content
onem2m-mgr.go 35.6 KiB
Newer Older
func (tm *SssMgr) oneM2M_subscribe_discovery_event(requestedIotPlatformId string) (err error) {

	return nil
}

Yann Garcia's avatar
Yann Garcia committed
func (tm *SssMgr) oneM2M_deserialize(sensor SensorDiscoveryInfo, response map[string]interface{}) (sensorResp SensorDiscoveryInfo, err error) {
	sensorResp = sensor // Same data structure
Yann Garcia's avatar
Yann Garcia committed
	log.Debug(">>> oneM2M_deserialize: response: ", response)
Yann Garcia's avatar
Yann Garcia committed

	for i, m := range response {
		log.Debug("==> ", i, " value is ", m)
Yann Garcia's avatar
Yann Garcia committed
		if _, ok := m.(map[string]interface{}); !ok {
			// Skip it
			log.Warn("oneM2M_deserialize: m is not map[string]interface{}")
			continue
		}
Yann Garcia's avatar
Yann Garcia committed
		// m is a map[string]interface.
		// loop over keys and values in the map.
Yann Garcia's avatar
Yann Garcia committed
		for k, v := range m.(map[string]interface{}) {
Yann Garcia's avatar
Yann Garcia committed
			log.Debug(k, " value is ", v)
			log.Debug("oneM2M_deserialize: type(v): ", reflect.TypeOf(v))

			if k == "ri" {
				if item, ok := v.(string); ok {
Yann Garcia's avatar
Yann Garcia committed
					sensorResp.SensorIdentifier = item
Yann Garcia's avatar
Yann Garcia committed
					log.Error("oneM2M_deserialize: Failed to process ", k)
				}
			} else if k == "ty" {
Yann Garcia's avatar
Yann Garcia committed
				if item, ok := v.(float64); ok {
					switch item {
					case 2:
						sensorResp.SensorType = "AE"
					case 3:
						sensorResp.SensorType = "CNT"
					case 4:
						sensorResp.SensorType = "CNI"
					default:
						sensorResp.SensorType = strconv.FormatFloat(item, 'f', -1, 64)
					}
Yann Garcia's avatar
Yann Garcia committed
					log.Error("oneM2M_deserialize: Failed to process ", k)
Yann Garcia's avatar
Yann Garcia committed
			} else {
				if item, ok := v.(string); ok {
					sensorResp.SensorCharacteristicList = append(
						sensorResp.SensorCharacteristicList,
						SensorCharacteristic{
							CharacteristicName:  k,
							CharacteristicValue: string(item),
						})
				} else if item, ok := v.(float64); ok {
					sensorResp.SensorCharacteristicList = append(
						sensorResp.SensorCharacteristicList,
						SensorCharacteristic{
							CharacteristicName:  k,
							CharacteristicValue: strconv.FormatFloat(item, 'f', -1, 64),
						})
				} else if item, ok := v.(int64); ok {
					sensorResp.SensorCharacteristicList = append(
						sensorResp.SensorCharacteristicList,
						SensorCharacteristic{
							CharacteristicName:  k,
							CharacteristicValue: strconv.FormatInt(item, 10),
						})
				} else if item, ok := v.(bool); ok {
					sensorResp.SensorCharacteristicList = append(
						sensorResp.SensorCharacteristicList,
						SensorCharacteristic{
							CharacteristicName:  k,
							CharacteristicValue: strconv.FormatBool(item),
						})
				} else if item, ok := v.([]string); ok {
					sensorResp.SensorCharacteristicList = append(
						sensorResp.SensorCharacteristicList,
						SensorCharacteristic{
							CharacteristicName:  k,
							CharacteristicValue: strings.Join(item, ","),
						})
				} else if item, ok := v.([]int64); ok {
					log.Error("oneM2M_deserialize: Failed to convert list of int64 into string: ", item)
				} else if item, ok := v.([]interface{}); ok {
Yann Garcia's avatar
Yann Garcia committed
					log.Debug("oneM2M_deserialize: Got []interface {} for ", k)
					log.Debug("oneM2M_deserialize: ValueOf ", reflect.ValueOf(item))
					s := SensorCharacteristic{
						CharacteristicName: k,
					}
					var buf bytes.Buffer
					fmt.Fprintf(&buf, "%T", item)
					s.CharacteristicValue = buf.String()
Yann Garcia's avatar
Yann Garcia committed
					sensorResp.SensorCharacteristicList = append(sensorResp.SensorCharacteristicList, s)
				} else {
					log.Error("oneM2M_deserialize: Failed to process: ", k)
				}
Yann Garcia's avatar
Yann Garcia committed
			}
		} // End of 'for' loop

	} // End of 'for' loop
Yann Garcia's avatar
Yann Garcia committed
	log.Debug("oneM2M_deserialize: sensorResp: ", sensorResp)
	return sensorResp, nil
Yann Garcia's avatar
Yann Garcia committed
}