00001 #include "otsdaq-core/SystemMessenger/SystemMessenger.h"
00002
00003 #include <iostream>
00004 #include <cstdlib>
00005 #include <cstdio>
00006 #include <unistd.h>
00007
00008 using namespace ots;
00009
00010
00011
00012
00013
00014 void SystemMessenger::addSystemMessage(std::string targetUser, std::string msg)
00015 {
00016 sysMsgCleanup();
00017
00018
00019
00020
00021
00022 if(sysMsgTargetUser_.size() && sysMsgTargetUser_[sysMsgTargetUser_.size()-1] == targetUser && sysMsgMessage_[sysMsgTargetUser_.size()-1] == msg) return;
00023
00024 sysMsgSetLock(true);
00025 sysMsgTargetUser_.push_back(targetUser);
00026 sysMsgMessage_.push_back(msg);
00027 sysMsgTime_.push_back(time(0));
00028 sysMsgDelivered_.push_back(false);
00029 sysMsgSetLock(false);
00030
00031 std::cout << __COUT_HDR_FL__ << "Current System Messages: " << sysMsgTargetUser_.size() << std::endl << std::endl;
00032 }
00033
00034
00035
00036
00037
00038
00039
00040 std::string SystemMessenger::getSystemMessage(std::string targetUser)
00041 {
00042
00043 std::string retStr = "";
00044 int cnt = 0;
00045 char tmp[100];
00046 for(uint64_t i=0;i<sysMsgTargetUser_.size();++i)
00047 if( sysMsgTargetUser_[i] == targetUser || sysMsgTargetUser_[i] == "*")
00048 {
00049
00050 if(cnt)
00051 retStr += "|";
00052 sprintf(tmp,"%lu",sysMsgTime_[i]);
00053 retStr += std::string(tmp) + "|" + sysMsgMessage_[i];
00054
00055 if(sysMsgTargetUser_[i] != "*")
00056 sysMsgDelivered_[i] = true;
00057 ++cnt;
00058 }
00059
00060 sysMsgCleanup();
00061 return retStr;
00062 }
00063
00064
00065
00066
00067 void SystemMessenger::sysMsgSetLock(bool set)
00068 {
00069 while(set && sysMsgLock_) usleep(1000);
00070 sysMsgLock_ = set;
00071 }
00072
00073
00074
00075
00076
00077 void SystemMessenger::sysMsgCleanup()
00078 {
00079
00080 for(uint64_t i=0;i<sysMsgTargetUser_.size();++i)
00081 if((sysMsgDelivered_[i] && sysMsgTargetUser_[i] != "*") ||
00082 sysMsgTime_[i] + SYS_CLEANUP_WILDCARD_TIME < time(0))
00083 {
00084
00085 sysMsgSetLock(true);
00086 sysMsgTargetUser_.erase (sysMsgTargetUser_.begin()+i);
00087 sysMsgMessage_.erase (sysMsgMessage_.begin()+i);
00088 sysMsgTime_.erase (sysMsgTime_.begin()+i);
00089 sysMsgDelivered_.erase (sysMsgDelivered_.begin()+i);
00090 sysMsgSetLock(false);
00091 --i;
00092 }
00093
00094 }