В нашем моделировании мы добавили два поля в класс cMessage как защищенные:
/* sequence number for log files */
long seqNo = 0;
/* timestamp at sending message */
simtime_t sendingTime;
и мы добавляем следующие методы паблика
public:
void setSeqNo(long n) {
this->seqNo = n;
}
long getSeqNo() {
return this->seqNo;
}
void setSentTime(simtime_t t) {
this->sendingTime = t;
}
simtime_t getSentTime() {
return this->sendingTime;
}
Теперь, когда приложение, смоделированное сервером, запускается, перед каждой отправкой сообщения оно выполняет:
pkt->setSeqNo(numPkSent);
pkt->setSentTime(simTime());
fprintf(this->analyticsCorrespondentNode, "PKT %u SENT AT TIME %f TO NODE %s \n", numPkSent, pkt->getSentTime().dbl(), d->clientAddr.get4().str().c_str());
С другой стороны, когда сообщение получено смоделированным клиентом приложения, если выполняется:
double recvTime = simTime().dbl();
fprintf(this->analyticsMobileNode, "RECEIVED PKT num. %d SENT AT TIME: %f RECEIVED AT TIME %f TRANSMISSION TIME ELAPSED %f \n", msg->getSeqNo(), msg->getSentTime().dbl(), recvTime, recvTime - msg->getSentTime().dbl());
Проблема в том, что SeqNo правильно записывается клиентом, так как он был установлен сервером перед отправкой. Вместо этого методы
msg->getSentTime.dbl()
всегда возвращает 0 в файле журнала клиента, если он правильно установлен сервером в файле журнала сервера. Я не понимаю, почему, возможно, происходит что-то странное при преобразовании cMessage в cPacket в клиентском приложении ... вы это знаете?