blob: bb5a1253451a001471c60eb43c4b7b9aba2b2ccd [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_MEDIA_AUDIO_AUDIO_OUTPUT_SERVICE_OUTPUT_CONNECTION_H_
#define CHROMECAST_MEDIA_AUDIO_AUDIO_OUTPUT_SERVICE_OUTPUT_CONNECTION_H_
#include <memory>
#include "base/memory/weak_ptr.h"
#include "chromecast/common/mojom/audio_socket.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/platform/platform_handle.h"
namespace net {
class StreamSocket;
} // namespace net
namespace chromecast {
namespace media {
namespace audio_output_service {
class OutputSocket;
// Base class for connecting to the audio output service.
// Since this class lives in renderers, to avoid creating sockets directly, it
// uses AudioSocketBroker to get socket handles.
class OutputConnection {
public:
explicit OutputConnection(
mojo::PendingRemote<mojom::AudioSocketBroker> pending_socket_broker);
OutputConnection(const OutputConnection&) = delete;
OutputConnection& operator=(const OutputConnection&) = delete;
virtual ~OutputConnection();
// Initiates connection to the audio output service. Will call OnConnected()
// when connection is successful.
void Connect();
protected:
// Called when a connection is established to the audio output service.
virtual void OnConnected(std::unique_ptr<OutputSocket> socket) = 0;
// Called when the connection failed (after retries).
virtual void OnConnectionFailed() = 0;
private:
void HandleConnectResult(int result);
void OnSocketDescriptor(mojo::PlatformHandle handle);
const mojo::Remote<mojom::AudioSocketBroker> socket_broker_;
std::unique_ptr<net::StreamSocket> connecting_socket_;
bool log_connection_failure_ = true;
int retry_count_ = 0;
base::WeakPtrFactory<OutputConnection> weak_factory_{this};
};
} // namespace audio_output_service
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_AUDIO_AUDIO_OUTPUT_SERVICE_OUTPUT_CONNECTION_H_