blob: 62e6daa99ab5009dbc4d6938cd5836401ec4a99f [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ARC_NETWORK_GUEST_SERVICE_H_
#define ARC_NETWORK_GUEST_SERVICE_H_
#include <string>
#include <base/bind.h>
#include <base/macros.h>
#include "arc/network/device_manager.h"
namespace arc_networkd {
class GuestService {
public:
using MessageHandler = base::Callback<void(const GuestMessage&)>;
virtual ~GuestService() = default;
void RegisterMessageHandler(const MessageHandler& handler);
protected:
// |dev_mgr| cannot be null and must outlive this object.
GuestService(GuestMessage::GuestType guest, DeviceManagerBase* dev_mgr);
virtual void OnStart();
virtual void OnStop();
virtual void OnDeviceAdded(Device* device) {}
virtual void OnDeviceRemoved(Device* device) {}
virtual void OnDefaultInterfaceChanged(const std::string& ifname) {}
void DispatchMessage(const GuestMessage& msg);
const GuestMessage::GuestType guest_;
DeviceManagerBase* dev_mgr_;
private:
MessageHandler handler_;
DISALLOW_COPY_AND_ASSIGN(GuestService);
};
} // namespace arc_networkd
#endif // ARC_NETWORK_GUEST_SERVICE_H_