* Author : Maxim Mamontov <faust@stargazer.dp.ua>
*/
-/*
- $Revision: 1.3 $
- $Date: 2010/03/04 12:07:03 $
- $Author: faust $
-*/
+#pragma once
+
+#include "rscript.h"
-#ifndef __UR_FUNCTOR_H__
-#define __UR_FUNCTOR_H__
+#include "stg/common.h"
#include <functional>
#include <algorithm>
#include <utility>
+#include <cstdint>
-#include "stg/os_int.h"
-#include "stg/common.h"
-
-#include "rscript.h"
+namespace STG::RS
+{
-class UpdateRouter : public std::unary_function<std::pair<const uint32_t, RS_USER>, void>
+class UpdateRouter : public std::unary_function<std::pair<const uint32_t, RS::USER>, void>
{
-public:
- UpdateRouter(REMOTE_SCRIPT & t)
- : obj(t) {};
+ public:
+ explicit UpdateRouter(REMOTE_SCRIPT & t)
+ : obj(t) {}
- void operator() (std::pair<const uint32_t, RS_USER> & val)
- {
- std::vector<uint32_t> newRouters = obj.IP2Routers(val.first);
- std::vector<uint32_t>::const_iterator oldIt(val.second.routers.begin());
- std::vector<uint32_t>::const_iterator newIt(newRouters.begin());
- val.second.shortPacketsCount = 0;
- while (oldIt != val.second.routers.end() ||
- newIt != newRouters.end())
+ void operator() (std::pair<const uint32_t, USER> & val)
{
- if (oldIt == val.second.routers.end())
+ std::vector<uint32_t> newRouters = obj.IP2Routers(val.second.ip);
+ std::vector<uint32_t>::const_iterator oldIt(val.second.routers.begin());
+ std::vector<uint32_t>::const_iterator newIt(newRouters.begin());
+ val.second.shortPacketsCount = 0;
+ while (oldIt != val.second.routers.end() ||
+ newIt != newRouters.end())
{
- if (newIt != newRouters.end())
+ if (oldIt == val.second.routers.end())
{
- obj.SendDirect(val.first, val.second, *newIt); // Connect on new router
- ++newIt;
+ if (newIt != newRouters.end())
+ {
+ obj.SendDirect(val.second, *newIt); // Connect on new router
+ ++newIt;
+ }
}
- }
- else if (newIt == newRouters.end())
- {
- //if (oldIt != newRouters.end())
- //{ // Already checked it
- obj.SendDirect(val.first, val.second, *oldIt, true); // Disconnect on old router
+ else if (newIt == newRouters.end())
+ {
+ obj.SendDirect(val.second, *oldIt, true); // Disconnect on old router
++oldIt;
- //}
- }
- else if (*oldIt < *newIt)
- {
- obj.SendDirect(val.first, val.second, *oldIt, true); // Disconnect on old router
- ++oldIt;
- }
- else if (*oldIt > *newIt)
- {
- obj.SendDirect(val.first, val.second, *newIt); // Connect on new router
- ++newIt;
- }
- else
- {
- if (oldIt != val.second.routers.end())
+ }
+ else if (*oldIt < *newIt)
+ {
+ obj.SendDirect(val.second, *oldIt, true); // Disconnect on old router
++oldIt;
- if (newIt != newRouters.end())
+ }
+ else if (*oldIt > *newIt)
+ {
+ obj.SendDirect(val.second, *newIt); // Connect on new router
++newIt;
+ }
+ else
+ {
+ ++oldIt;
+ if (newIt != newRouters.end())
+ ++newIt;
+ }
}
+ val.second.routers = newRouters;
}
- val.second.routers = newRouters;
- /*if (val.second.souters != newRouters)
- {
- obj.Send(val.first, val.second, true); // Disconnect on old router
- val.second.routerIP = obj.IP2Router(val.first); // Change router
- val.second.shortPacketsCount = 0; // Reset packets count (to prevent alive send)
- obj.Send(val.first, val.second); // Connect on new router
- }*/
- }
-private:
- REMOTE_SCRIPT & obj;
+ private:
+ REMOTE_SCRIPT & obj;
};
-#endif
+} // namespace RS