diff options
Diffstat (limited to 'src/net/packetcounters.cpp')
-rw-r--r-- | src/net/packetcounters.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/net/packetcounters.cpp b/src/net/packetcounters.cpp new file mode 100644 index 000000000..40ab72024 --- /dev/null +++ b/src/net/packetcounters.cpp @@ -0,0 +1,128 @@ +/* + * The Mana Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * + * This file is part of The Mana Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "net/packetcounters.h" + +extern volatile int cur_time; +extern volatile bool runCounters; + +int PacketCounters::mInCurrentSec = 0; +int PacketCounters::mInBytes = 0; +int PacketCounters::mInBytesCalc = 0; +int PacketCounters::mInPackets = 0; +int PacketCounters::mInPacketsCalc = 0; +int PacketCounters::mOutCurrentSec = 0; +int PacketCounters::mOutBytes = 0; +int PacketCounters::mOutBytesCalc = 0; +int PacketCounters::mOutPackets = 0; +int PacketCounters::mOutPacketsCalc = 0; + +void PacketCounters::incInBytes(int cnt) +{ + if (!runCounters) + return; + + updateCounter(PacketCounters::mInCurrentSec, PacketCounters::mInBytesCalc, + PacketCounters::mInBytes); + + PacketCounters::mInBytes += cnt; +} + +void PacketCounters::incInPackets() +{ + if (!runCounters) + return; + + updateCounter(PacketCounters::mInCurrentSec, + PacketCounters::mInPacketsCalc, PacketCounters::mInPackets); + + PacketCounters::mInPackets ++; +} + +int PacketCounters::getInBytes() +{ + return PacketCounters::mInBytesCalc; +} + +int PacketCounters::getInPackets() +{ + return PacketCounters::mInPacketsCalc; +} + +void PacketCounters::incOutBytes(int cnt) +{ + if (!runCounters) + return; + + updateCounter(PacketCounters::mOutCurrentSec, + PacketCounters::mOutBytesCalc, PacketCounters::mOutBytes); + + PacketCounters::mOutBytes += cnt; +} + +void PacketCounters::incOutPackets() +{ + if (!runCounters) + return; + + updateCounter(PacketCounters::mOutCurrentSec, + PacketCounters::mOutPacketsCalc, + PacketCounters::mOutPackets); + + PacketCounters::mOutPackets ++; +} + +int PacketCounters::getOutBytes() +{ + return PacketCounters::mOutBytesCalc; +} + +int PacketCounters::getOutPackets() +{ + return PacketCounters::mOutPacketsCalc; +} + + +void PacketCounters::updateCounter(int ¤tSec, int &calc, int &counter) +{ + int idx = cur_time % 60; + if (currentSec != idx) + { + currentSec = idx; + calc = counter; + counter = 0; + } +} + +void PacketCounters::update() +{ + if (!runCounters) + return; + + updateCounter(PacketCounters::mInCurrentSec, PacketCounters::mInBytesCalc, + PacketCounters::mInBytes); + updateCounter(PacketCounters::mInCurrentSec, + PacketCounters::mInPacketsCalc, PacketCounters::mInPackets); + updateCounter(PacketCounters::mOutCurrentSec, + PacketCounters::mOutBytesCalc, PacketCounters::mOutBytes); + updateCounter(PacketCounters::mOutCurrentSec, + PacketCounters::mOutPacketsCalc, PacketCounters::mOutPackets); +} |