cMessage
Message可以被調度(self-message)、取消、從一個Gate發送出去、直接發給另一個module;所有以上,都是通過cSimpleModule來實現的。
Message在創建時可以指定名字,其它信息包括消息類型、優先級、時間戳。控制信息字段允許我們使用模型模擬協議層間的通信。context pointer字段允許我們在同一時間是用多個計時器。一個Message中也存儲了關於該消息的最后一次發送的信息,例如發送時間、到達時間、到達的module和gate。
isSelfMessage可以幫助我們區分self-message和來自其他節點的消息。
如果需要一些更多的字段,可以通過msg文件創建一個Message,它會自動繼承cMessage的相關方法。
方法(msg->xxx()) | 說明 |
setName(const char *) | 設置消息名 |
const char * getName() | 返回消息名 |
dup() | 返回消息的副本; cMessage * copy = msg->dup(); |
int getSenderModuleId() | 獲得發送該消息的Module的ID |
int getSenderGateId() | 獲得發送該消息的Gate的ID |
int getArrivalModuleId() | 獲得該消息將要到達的Module的ID |
int getArrivalGateId() | 獲取該消息將要到達的Gate的ID |
bool isSelfMessage() | 判斷消息是否是SelfMessage |
cModule * getSenderModule() | 獲取指向發送該消息Module的指針 |
cGate * getSenderGate() | 返回一個指針,指向該消息上一次發送時的gate |
cModule * getArrivalModule() | 返回指向該消息到達Module的指針 |
cGate * getArrivalGate() | 返回一個指針,指向該消息從哪個Gate到達 |
bool arrivedOn(int gateId) bool arrivedOn(char * gateName , int gateIndex) |
如果該消息通過給定的gate到達了,就返回true |
long getId() | 獲取消息ID |
virtual const char * getDisplayString() | 展示消息在運行時的顯示String |
void setArrival(int moduleId,int gateId) | 定制調度器,直接由調度器設置消息要到達的模塊和Gate |
cModule
cModule是cSimpleModule的父類,cSimpleModuel在cModule的基礎上添加了許多方法。
方法 | 說明 |
virtual void setName(const char * s) | 給Module命名 |
virtual const char * getFullName() | 返回Module的全名,格式為:module名[i] |
virtual string getFullPath() | 返回Module的路徑,格式為:網絡名.vector名.mudule名[i] |
virtual string str() | 重寫該方法以添加module ID |
virtual cModule * getParentModule() const | 返回該Module的父Module,具體分級可以通過getFullPath()方法得到 |
int getIndex() | 獲得該module在vector中的索引 |
getVectorSize() | 獲得該module所在vector的大小 |
virtual cModule * getSubmodule(const char * name,int index=-1) | 返回指向 通過名字和索引指定 的Module |
virtual cModule * getModuleByPath(const char * path) | 返回通過 module路徑指定的Module 的指針 |
virtual int gateSize(const char * gatename) | 返回gate vector的size |
virtual void arrived(cMessage * msg , cGate * ongate , simtime_t) | 與send()方法相對應的方法,不過是在另一個Module中調用的。 |
virtual cCanvas *getCanvas() | 返回這個Module的默認canvas |
cSimpleModule
主要方法有四個initialize()、handleMessage(cMessage * msg)、finish()
initialize():omnet++在創建一個Module時調用該方法。
handleMessage(cMessage * msg):當Module收到一個Message時調用該方法。
我們可以使用send()方法向另一個Module發送消息,或者使用scheduleAt()和cancelEvent()方法來部署延遲、計時器、超時。
finish()函數當仿真成功結束時被調用。該方法的經典用法是記錄下載仿真過程中的統計信息。
方法 | 說明 |
virtual void setName(const char * s) | 給Module命名 |
virtual const char * getFullName() | 返回Module的全名,格式為:module名[i] |
virtual string getFullPath() | 返回Module的路徑,格式為:網絡名.vector名.mudule名[i] |
virtual string str() | 重寫該方法以添加module ID |
virtual cModule * getParentModule() const | 返回該Module的父Module,具體分級可以通過getFullPath()方法得到 |
int getIndex() | 獲得該module在vector中的索引 |
getVectorSize() | 獲得該module所在vector的大小 |
virtual cModule * getSubmodule(const char * name,int index=-1) | 返回指向 通過名字和索引指定 的Module |
virtual cModule * getModuleByPath(const char * path) | 返回通過 module路徑指定的Module 的指針 |
virtual int gateSize(const char * gatename) | 返回gate vector的size |
virtual void arrived(cMessage * msg , cGate * ongate , simtime_t) | 與send()方法相對應的方法,不過是在另一個Module中調用的。 |
virtual cCanvas *getCanvas() | 返回這個Module的默認canvas |
virtual void handleMessage(cMessage * msg) | 消息處理函數,當有消息到達時被調用 |
virtual void send( cMessage * msg , const char *gatename , int gateindex=-1) | 從指定gate把消息發送出去 |
virtual sendDelayed(cMessage * msg, simtime_t delay,const char * gatename , int gateindex=-1 ) | 延遲delay秒后把消息發送出去 |
void sendDirect(cMessage * msg,simtime_t propagation Delay,simtime_t duration,cModule * mod,const char * inputGateName , int gateindex=-1) | 直接把一個消息發送到其他Module, |
void scheduleAt(simtime_t t,cMessage * msg) | 發送一個self-message |
cMessage * cancelEvent(cMessage * msg) | 移除一個消息。常用於我們之前用scheduleAt()部署的消息,用來取消一個計時器 |
void cancelAndDelete(cMessage * msg) | 對msg調用cancelEvent(),之后刪除它。該方法常用於SimpleModule的析構函數中,用於銷毀self-message |
void wait(simtime_t time) | 等待一段時間。 只用於我們不希望其他消息在這段時間內到達的時候。 |
cGate
代表了一個Module的gate。
cGate對象被Module創建並管理,使用者通常不會直接創建和銷毀cGate。
const char * getName() | 返回gate的名字,不包含索引 |
const char * getFullName() | 返回gate的全名,包含索引 |
cObject * getOwner() | 返回gate的所屬Module |
cModule * getOwnerModule() | 指向gate所屬Module |
int getIndex() | 返回gate的索引號 |
int getVectorSize() | 返回gate vector的size |
cGate * getPreviousGate() | 指向與這個gate相連接的上一個gate |
cGate * getNextGate() | 指向與這個Gate相連接的下一個Gate |