summaryrefslogtreecommitdiff
path: root/ACE/apps/drwho/PM_Client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/drwho/PM_Client.cpp')
-rw-r--r--ACE/apps/drwho/PM_Client.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/ACE/apps/drwho/PM_Client.cpp b/ACE/apps/drwho/PM_Client.cpp
new file mode 100644
index 00000000000..216cb6e5368
--- /dev/null
+++ b/ACE/apps/drwho/PM_Client.cpp
@@ -0,0 +1,140 @@
+// $Id$
+
+#include "Options.h"
+#include "PM_Server.h"
+#include "PM_Client.h"
+#include "ace/ACE.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_stdlib.h"
+
+// This function is used to merge the LOGIN_NAME from server HOST_NAME
+// into the userids kept on the client's side. Note that we must
+// allocate memory for HOST_NAME...
+
+Protocol_Record *
+PM_Client::insert_protocol_info (Protocol_Record &protocol_record)
+{
+ Protocol_Record *prp = this->ss->insert (protocol_record.get_login ());
+ Drwho_Node *current_node = protocol_record.get_drwho_list ();
+ Drwho_Node *np = this->get_drwho_node (ACE::strnew (current_node->get_host_name ()),
+ prp->drwho_list_);
+
+ // Update the active and inactive counts.
+
+ if (np->get_active_count () < current_node->get_active_count ())
+ {
+ np->set_active_count (current_node->get_active_count ());
+ prp->is_active_ = 1;
+ }
+
+ if (np->get_inactive_count () < current_node->get_inactive_count())
+ np->set_inactive_count (current_node->get_inactive_count ());
+
+ return prp;
+}
+
+// This routine does all the dirty work, and actually prints out the
+// friends info in a nicely formatted manner.
+
+void
+PM_Client::process (void)
+{
+ const char *(Protocol_Record::*get_name)(void);
+
+ if (Options::get_opt (Options::PRINT_LOGIN_NAME))
+ get_name = &Protocol_Record::get_login;
+ else
+ get_name = &Protocol_Record::get_real;
+
+ int active_friends = 0;
+ int users = this->Protocol_Manager::get_total_users ();
+
+ ACE_DEBUG ((LM_DEBUG,
+ "------------------------\n"));
+
+ if (Options::get_opt (Options::PRINT_LOGIN_NAME))
+ this->max_key_length = MAXUSERIDNAMELEN;
+
+ // Goes through the queue of all the logged in friends and prints
+ // out the associated information.
+
+ for (Protocol_Record *prp = this->Protocol_Manager::get_each_friend ();
+ prp != 0;
+ prp = this->Protocol_Manager::get_each_friend ())
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "%c%-*s [", (prp->is_active_ != 0 ? '*' : ' '),
+ this->max_key_length,
+ (prp->*get_name) ()));
+
+ for (Drwho_Node *np = prp->get_drwho_list (); ;)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ np->get_host_name (),
+ stdout));
+
+ active_friends += np->get_active_count ();
+
+ if (np->get_inactive_count () != 0)
+ {
+ if (np->get_active_count () != 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "*(%d)",
+ np->get_active_count ()));
+ }
+ else if (np->get_active_count () > 1)
+ ACE_DEBUG ((LM_DEBUG,
+ "*(%d)",
+ np->get_active_count ()));
+ else if (np->get_active_count () == 1)
+ ACE_DEBUG ((LM_DEBUG,
+ "*"));
+
+ np = np->next_;
+ if (np == 0)
+ break;
+ else
+ ACE_DEBUG ((LM_DEBUG,
+ " "));
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "]\n"));
+ }
+
+ ACE_DEBUG ((LM_DEBUG,
+ "------------------------\n"));
+ ACE_DEBUG ((LM_DEBUG,
+ "friends: %d\tusers: %d\n",
+ active_friends,
+ users));
+}
+
+char *
+PM_Client::handle_protocol_entries (const char *cp,
+ const char *login_name,
+ const char *real_name)
+{
+ static Protocol_Record protocol_record (1);
+ Drwho_Node *current_node = protocol_record.get_drwho_list ();
+
+ protocol_record.set_login (login_name);
+ protocol_record.set_real (real_name);
+ current_node->set_inactive_count (ACE_OS::atoi (cp));
+ current_node->set_active_count (ACE_OS::atoi (cp = ACE_OS::strchr (cp, ' ') + 1));
+ current_node->set_host_name (cp = ACE_OS::strchr (cp, ' ') + 1);
+
+ this->insert_protocol_info (protocol_record);
+
+ return (char *) ACE::strend (cp);
+}
+
+PM_Client::PM_Client (void)
+ : max_key_length (0)
+{
+}
+
+PM_Client::~PM_Client (void)
+{
+}