From c3ef93915b13214d3ee26c7224c0f109df58897f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 11 Mar 2015 10:30:00 +0000 Subject: [PATCH] net_server: Clients can now check if a service is running. * Using the new kMsgIsServiceRunning command. --- headers/private/net/NetServer.h | 3 ++- src/servers/net/NetServer.cpp | 9 +++++++++ src/servers/net/Services.cpp | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/headers/private/net/NetServer.h b/headers/private/net/NetServer.h index d0d1bf13ef..e0901e3782 100644 --- a/headers/private/net/NetServer.h +++ b/headers/private/net/NetServer.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2010, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2015, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -20,6 +20,7 @@ #define kMsgJoinNetwork 'JNnw' #define kMsgLeaveNetwork 'LVnw' #define kMsgAutoJoinNetwork 'AJnw' +#define kMsgIsServiceRunning 'IRsv' #endif // _NET_SERVER_H diff --git a/src/servers/net/NetServer.cpp b/src/servers/net/NetServer.cpp index b0b89eea03..9375a9773c 100644 --- a/src/servers/net/NetServer.cpp +++ b/src/servers/net/NetServer.cpp @@ -304,6 +304,15 @@ NetServer::MessageReceived(BMessage* message) break; } + case kMsgIsServiceRunning: + { + // Forward the message to the handler that can answer it + BHandler* handler = fServices.Target(NULL); + if (handler != NULL) + handler->MessageReceived(message); + break; + } + default: BApplication::MessageReceived(message); return; diff --git a/src/servers/net/Services.cpp b/src/servers/net/Services.cpp index ec3b4e70d2..d022ea2b2b 100644 --- a/src/servers/net/Services.cpp +++ b/src/servers/net/Services.cpp @@ -22,6 +22,8 @@ #include #include +#include + using namespace std; using namespace BNetworkKit; @@ -196,6 +198,19 @@ Services::MessageReceived(BMessage* message) _Update(*message); break; + case kMsgIsServiceRunning: + { + const char* name = message->GetString("name"); + if (name == NULL) + break; + + BMessage reply(B_REPLY); + reply.AddString("name", name); + reply.AddBool("running", fNameMap.find(name) != fNameMap.end()); + message->SendReply(&reply); + break; + } + default: BHandler::MessageReceived(message); }