⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 switch.cpp

📁 Good example to undrestand of omnet++
💻 CPP
字号:
//
// This file is part of an OMNeT++/OMNEST simulation example.
//
// Copyright (C) 1992-2005 Andras Varga
//
// This file is distributed WITHOUT ANY WARRANTY. See the file
// `license' for details on this and other legal matters.
//


#include "dynapacket_m.h"

#define STACKSIZE 16384

/**
 * Simulates a switch between clients and server; see NED file for more info
 */
class Switch : public cSimpleModule
{
  public:
    Switch() : cSimpleModule(STACKSIZE) {}
    virtual void activity();
};

Define_Module( Switch );

void Switch::activity()
{
    double pkDelay = 1 / (double)par("pkRate");
    int queueMaxLen = (int) par("queueMaxLen");
    cQueue queue("queue");
    for(;;)
    {
        // receive msg
        cMessage *msg;
        if (!queue.empty())
            msg = (cMessage *) queue.pop();
        else
            msg = receive();

        // model processing delay; packets that arrive meanwhile are queued
        waitAndEnqueue(pkDelay, &queue);

        // send msg to destination
        DynaPacket *pk = check_and_cast<DynaPacket *>(msg);
        int dest = pk->getDestAddress();
        ev << "Relaying msg to addr=" << dest << '\n';
        send( msg, "out", dest);

        // display status: normal=queue empty, yellow=queued packets; red=queue overflow
        int qLen = queue.length();
        if (ev.isGUI()) displayString().setTagArg("i",1, qLen==0 ? "" : qLen<queueMaxLen ? "gold" : "red");

        // model finite queue size
        while (queue.length() > queueMaxLen)
        {
            ev << "Buffer overflow, discarding " << queue.tail()->name() << endl;
            delete queue.pop();
        }
    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -