From c652e8fa8141d7e323cbdbbc0a662244a5a84955 Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Tue, 22 Nov 2011 01:15:09 +0100 Subject: Added server menu with list of clients. Connections can be terminated with the "red" key. The former main menu action of suspending live TV moved to the "blue" key. --- server/menu.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 server/menu.c (limited to 'server/menu.c') diff --git a/server/menu.c b/server/menu.c new file mode 100644 index 0000000..dac09fe --- /dev/null +++ b/server/menu.c @@ -0,0 +1,67 @@ +/* + * $Id: menu.c,v 1.10 2010/07/19 13:49:31 schmirl Exp $ + */ + +#include +#include +#include + +#include "server/menu.h" +#include "server/setup.h" +#include "server/server.h" +#include "server/suspend.h" + +cStreamdevServerMenu::cStreamdevServerMenu(): cOsdMenu(tr("Streamdev Connections"), 4, 20) { + cThreadLock lock; + const cList& clients = cStreamdevServer::Clients(lock); + for (cServerConnection *s = clients.First(); s; s = clients.Next(s)) + Add(new cOsdItem(s->ToText())); + SetHelpKeys(); + Display(); +} + +cStreamdevServerMenu::~cStreamdevServerMenu() { +} + +void cStreamdevServerMenu::SetHelpKeys() { + SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, StreamdevServerSetup.SuspendMode == smOffer ? tr("Suspend") : NULL); +} + +eOSState cStreamdevServerMenu::Disconnect() { + cOsdItem *item = Get(Current()); + if (item) { + cThreadLock lock; + const cList& clients = cStreamdevServer::Clients(lock); + const char *text = item->Text(); + for (cServerConnection *s = clients.First(); s; s = clients.Next(s)) { + if (!strcmp(text, s->ToText())) { + s->Close(); + Del(Current()); + SetHelpKeys(); + break; + } + } + } + return osContinue; +} + +eOSState cStreamdevServerMenu::Suspend() { + if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive()) { + cControl::Launch(new cSuspendCtl); + return osBack; + } + return osContinue; +} + +eOSState cStreamdevServerMenu::ProcessKey(eKeys Key) { + eOSState state = cOsdMenu::ProcessKey(Key); + if (state == osUnknown) { + switch (Key) { + case kRed: return Disconnect(); + case kBlue: return Suspend(); + case kOk: return osBack; + default: break; + } + } + return state; +} -- cgit v1.2.3