30 |
|
|
31 |
|
int Collector::collect() |
32 |
|
{ |
33 |
< |
cerr << bright << green << "Collector::collect()\n" << reset; |
33 |
> |
cerr << bright << green << "Started collector daemon.\n" << reset; |
34 |
|
|
35 |
|
net::Oscar::Session session; |
36 |
|
net::Oscar::AuthTool auth(session); |
89 |
|
{ |
90 |
|
ext::Handle<dbi::Connection> db(dbi::Connect(database.driver, database.host, database.user, database.password, |
91 |
|
database.db)); |
92 |
< |
ext::Handle<dbi::ResultSet> previous(db->Execute("SELECT message FROM messages WHERE stamp=(SELECT MAX(stamp) " |
93 |
< |
"FROM messages WHERE id='" + lexical_cast<ext::String>(buddy.getId()) + "') AND id='" |
92 |
> |
ext::Handle<dbi::ResultSet> previous(db->Execute("SELECT message FROM messages " |
93 |
> |
"WHERE stamp=(SELECT MAX(stamp) FROM messages WHERE id='" |
94 |
> |
+ lexical_cast<ext::String>(buddy.getId()) + "') AND id='" |
95 |
|
+ lexical_cast<ext::String>(buddy.getId()) + "'")); |
96 |
|
|
97 |
< |
if (previous->MoveNext()) if (ext::String(message) == previous->GetString("message")) return; |
97 |
> |
if (previous->MoveNext()) |
98 |
> |
{ |
99 |
> |
if (ext::String(message) == previous->GetString("message")) return; |
100 |
> |
} |
101 |
> |
|
102 |
> |
db->Execute("INSERT INTO messages (stamp, message, id) VALUES ('" |
103 |
> |
+ ext::String(message.getStamp()) + "', '" + db->Escape(message) |
104 |
> |
+ "', '" + lexical_cast<ext::String>(buddy.getId()) + "')"); |
105 |
|
|
106 |
< |
cerr << bright << red << "Collector::status(" << blue << buddy << red << ", " << reset << message << bright << red |
107 |
< |
<< ")\n" << reset; |
100 |
< |
|
101 |
< |
db->Execute("INSERT INTO messages (stamp, message, id) VALUES ('" + ext::String(message.getStamp()) + "', '" |
102 |
< |
+ db->Escape(message) + "', '" + lexical_cast<ext::String>(buddy.getId()) + "')"); |
106 |
> |
cerr << bright << red << "Collected away message from " << blue << buddy |
107 |
> |
<< red << ".\n" << reset; |
108 |
|
} |
109 |
|
} |
110 |
|
|
111 |
|
void Collector::receive(const ext::String& buddy, const ext::String& message) |
112 |
|
{ |
113 |
< |
cerr << bright << red << "Collector::receive(" << blue << Buddy(buddy) << red << ", " << reset << message << bright |
114 |
< |
<< red << ")\n" << reset; |
113 |
> |
if (Zoe::debug) cerr << "buddy = " << Buddy(buddy) << "\nmessage = " |
114 |
> |
<< message << '\n'; |
115 |
|
|
116 |
|
if (buddies.find(buddy) != buddies.end()) |
117 |
|
{ |
118 |
< |
Stamp stamp; |
118 |
> |
Buddy buddy_(*buddies.find(buddy)); |
119 |
|
|
120 |
|
sleep(1); |
121 |
|
|
122 |
< |
icbm->Simple(buddy, ext::String(stamp) + " " + lexical_cast<ext::String>(std::time(NULL)) + " " |
123 |
< |
+ lexical_cast<ext::String>(api::GetWallTimerSeconds())); |
122 |
> |
icbm->Simple(buddy, ext::String(buddy_) + " = {\n rss = " |
123 |
> |
+ buddy_.getRss() + "\n atom = " + buddy_.getAtom() + "\n}"); |
124 |
|
} |
125 |
|
else |
126 |
|
{ |
127 |
|
sleep(1); |
128 |
|
|
129 |
< |
icbm->Simple(buddy, "<font face=\"Tahoma\" size=2>Mommy told me not to talk to strangers.</font> O:-)"); |
129 |
> |
icbm->Simple(buddy, "<font face=\"Tahoma\" size=2>Mommy told me not to " |
130 |
> |
"talk to strangers.</font> O:-)"); |
131 |
|
} |
132 |
|
} |