]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_ircv3_servertime.cpp
Implement support for millisecond level server-time accuracy.
[user/henk/code/inspircd.git] / src / modules / m_ircv3_servertime.cpp
index 1c35c422b041736781f99adb54893978550064a8..ec6e48daaa219d0870e96fd0dfce2382004db67c 100644 (file)
 class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<ServerTimeTag>
 {
        time_t lasttime;
+       long lasttimens;
        std::string lasttimestring;
 
        void RefreshTimeString()
        {
                const time_t currtime = ServerInstance->Time();
-               if (currtime != lasttime)
+               const long currtimens = ServerInstance->Time_ns();
+               if (currtime != lasttime || currtimens != lasttimens)
                {
                        lasttime = currtime;
-                       // Cache the string so it's not recreated every time a message is sent
-                       lasttimestring = IRCv3::ServerTime::FormatTime(currtime);
+                       lasttimens = currtimens;
+
+                       // Cache the string so it's not recreated every time a message is sent.
+                       lasttimestring = IRCv3::ServerTime::FormatTime(currtime, (currtimens ? currtimens / 1000000 : 0));
                }
        }
 
@@ -42,6 +46,7 @@ class ServerTimeTag : public IRCv3::ServerTime::Manager, public IRCv3::CapTag<Se
                : IRCv3::ServerTime::Manager(mod)
                , IRCv3::CapTag<ServerTimeTag>(mod, "server-time", "time")
                , lasttime(0)
+               , lasttimens(0)
        {
                tagprov = this;
        }