blob: aa37701e7551260a286587a11d8d966a22fa340c [file] [log] [blame]
// Copyright 2014 The Chromium 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 ATHENA_SYSTEM_DEVICE_SOCKET_LISTENER_H_
#define ATHENA_SYSTEM_DEVICE_SOCKET_LISTENER_H_
#include <string>
#include "base/basictypes.h"
#include "base/memory/ref_counted.h"
namespace base {
class TaskRunner;
}
namespace athena {
// This class reads device-data from a socket.
class DeviceSocketListener {
public:
DeviceSocketListener(const std::string& socket_parth,
size_t data_size);
virtual ~DeviceSocketListener();
static void CreateSocketManager(
scoped_refptr<base::TaskRunner> io_task_runner);
static void ShutdownSocketManager();
// This is called on the IO thread when data is available on the socket.
// |data| is guaranteed to be of exactly |data_size| length. Note that the
// implementation must not mutate or free the data.
virtual void OnDataAvailableOnIO(const void* data) = 0;
protected:
void StartListening();
void StopListening();
private:
const std::string socket_path_;
size_t data_size_;
DISALLOW_COPY_AND_ASSIGN(DeviceSocketListener);
};
} // namespace athena
#endif // ATHENA_SYSTEM_DEVICE_SOCKET_LISTENER_H_