aboutsummaryrefslogtreecommitdiff
path: root/buffet/binder_weave_service.h
diff options
context:
space:
mode:
Diffstat (limited to 'buffet/binder_weave_service.h')
-rw-r--r--buffet/binder_weave_service.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/buffet/binder_weave_service.h b/buffet/binder_weave_service.h
new file mode 100644
index 0000000..c033366
--- /dev/null
+++ b/buffet/binder_weave_service.h
@@ -0,0 +1,72 @@
+// Copyright 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef BUFFET_BINDER_WEAVE_SERVICE_H_
+#define BUFFET_BINDER_WEAVE_SERVICE_H_
+
+#include <memory>
+#include <vector>
+#include <string>
+
+#include <base/macros.h>
+#include <base/memory/weak_ptr.h>
+
+#include "android/weave/IWeaveClient.h"
+#include "android/weave/BnWeaveService.h"
+
+namespace weave {
+class Command;
+class Device;
+}
+
+namespace buffet {
+
+// An implementation of android::weave::IWeaveService binder.
+// This object is a proxy for weave::Device. A new instance of weave service is
+// created for each connected client. As soon as the client disconnects, this
+// object takes care of cleaning up that client's resources (e.g. it removes
+// the components and their state added by the client).
+class BinderWeaveService final : public android::weave::BnWeaveService {
+ public:
+ BinderWeaveService(weave::Device* device,
+ android::sp<android::weave::IWeaveClient> client);
+ ~BinderWeaveService() override;
+
+ private:
+ // Binder methods for android::weave::IWeaveService:
+ android::binder::Status addComponent(
+ const android::String16& name,
+ const std::vector<android::String16>& traits) override;
+ android::binder::Status registerCommandHandler(
+ const android::String16& component,
+ const android::String16& command) override;
+ android::binder::Status updateState(
+ const android::String16& component,
+ const android::String16& state) override;
+
+ void OnCommand(const std::string& component_name,
+ const std::string& command_name,
+ const std::weak_ptr<weave::Command>& command);
+
+ weave::Device* device_;
+ android::sp<android::weave::IWeaveClient> client_;
+ std::vector<std::string> components_;
+
+ base::WeakPtrFactory<BinderWeaveService> weak_ptr_factory_{this};
+ DISALLOW_COPY_AND_ASSIGN(BinderWeaveService);
+};
+
+} // namespace buffet
+
+#endif // BUFFET_BINDER_WEAVE_SERVICE_H_