// Copyright 2017 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 MIDIS_SUBDEVICE_CLIENT_FD_HOLDER_H_
#define MIDIS_SUBDEVICE_CLIENT_FD_HOLDER_H_

#include <memory>

#include <base/files/file_descriptor_watcher_posix.h>
#include <base/files/scoped_file.h>
#include <base/memory/weak_ptr.h>

#include "media/midi/message_util.h"
#include "media/midi/midi_message_queue.h"

namespace midis {

// Container to store the client_id, pipe FD and file watcher task id for the
// corresponding pipe.
class SubDeviceClientFdHolder {
 public:
  using ClientDataCallback = base::Callback<void(
      uint32_t subdevice_id, const uint8_t* buffer, size_t buf_len)>;

  SubDeviceClientFdHolder(uint32_t client_id,
                          uint32_t subdevice_id,
                          base::ScopedFD fd,
                          ClientDataCallback client_data_cb);
  static std::unique_ptr<SubDeviceClientFdHolder> Create(
      uint32_t client_id,
      uint32_t subdevice_id,
      base::ScopedFD fd,
      ClientDataCallback client_data_cb);
  ~SubDeviceClientFdHolder();
  int GetRawFd() { return fd_.get(); }
  uint32_t GetClientId() const { return client_id_; }
  // This function is used to write data *to* the client when it is received
  // from a MIDI h/w device. NOTE: A failure in this write shouldn't result in
  // the deletion of a client. A faulty / crashed / deleted client will be
  // handled from the Client handling code via TriggerClientDeletion().
  void WriteDeviceDataToClient(const void* buffer, size_t buf_len);

 private:
  // This function is used as the callback which is run when a
  // base::FileDescriptorWatcher is set up on the client's fd for this
  // particular subdevice. It reads the data *from* the client, and in turn
  // invokes client_data_cb_ which writes the data to the device h/w.
  void HandleClientMidiData();
  // Starts to watch the client pipe FD.
  bool StartClientMonitoring();

  uint32_t client_id_;
  uint32_t subdevice_id_;
  base::ScopedFD fd_;
  std::unique_ptr<base::FileDescriptorWatcher::Controller> watcher_;
  ClientDataCallback client_data_cb_;
  std::unique_ptr<midi::MidiMessageQueue> queue_;
  base::WeakPtrFactory<SubDeviceClientFdHolder> weak_factory_;

  DISALLOW_COPY_AND_ASSIGN(SubDeviceClientFdHolder);
};

}  // namespace midis

#endif  // MIDIS_SUBDEVICE_CLIENT_FD_HOLDER_H_
