Как получить местоположение узла, используя его адрес в скрипте? - PullRequest
2 голосов
/ 13 июня 2019

Я написал команду передачи, которая принимает адрес и данные в качестве входных данных и отправляет данные на этот узел.Я попытался получить местоположение узла, используя его адрес, но он показывает нулевое значение, но данные успешно передаются.
Почему это происходит и каково решение?

Пример:

transmit 2,[1,2,3]   //transmit data [1,2,3] to node-2

transmit = { addr, data ->
    println "TRANSMIT $addr, $data"
    println phy << new DatagramReq(to: addr, protocol: Protocol.MAC, data: data)
    NodeInfo n = new NodeInfo(addr)
    println 'location = '+n.getLocation()
    println 'Address :'+addr+'\nData :'+data

    def txNtf = receive(TxFrameNtf, 1000)

    println txNtf  
}

Model.groovy:

class Model extends UnetAgent {

int neighbor, addr;
float neighbor_distance;
def ranging

def dist;
def data


public void startup() {
AgentID phy = agentForService(Services.PHYSICAL);
subscribe(topic(phy));

ranging = agentForService Services.RANGING;
subscribe topic(ranging);

def nodeInfo = agentForService Services.NODE_INFO;
addr = nodeInfo.address;

}

void processMessage(Message msg) {
if (msg instanceof DatagramNtf && msg.protocol == Protocol.MAC)
{     
    neighbor = msg.from;
    println " BEACON RECEIVED FROM:" +neighbor
    data = msg.getData()

    def bits=32

    System.out.println "number of bits sent :"+bits*data.size()

    ranging << new RangeReq(to: neighbor);
  }
  else if (msg instanceof RangeNtf )
  {   
    float neighbor_distance = msg.getRange();
    println( "\n Distance between node "+addr + " and neighbor " +neighbor+ " is " + neighbor_distance+"m.\n")


    }
  }

  void setup() {


       }

   }

1 Ответ

0 голосов
/ 20 июля 2019

Ваш код:

NodeInfo n = new NodeInfo(addr)
println 'location = '+n.getLocation()

создает объект информации об узле и пытается получить от него location. По умолчанию такой объект не имеет location, и, следовательно, вы получаете значение null. Созданный вами объект не ссылается на агент информации узла, работающий на узле.

То, что вы, возможно, намеревались получить, было получить информацию от информационного агента узла, которую вам нужно искать, а не пытаться создавать локально. Пример кода:

def n = agentForService org.arl.unet.Services.NODE_INFO
println 'location = '+n.location
...