// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CAST_COMMON_CHANNEL_VIRTUAL_CONNECTION_ROUTER_H_ #define CAST_COMMON_CHANNEL_VIRTUAL_CONNECTION_ROUTER_H_ #include <cstdint> #include <map> #include <memory> #include <optional> #include <string> #include "cast/common/channel/proto/cast_channel.pb.h" #include "cast/common/channel/virtual_connection.h" #include "cast/common/public/cast_socket.h" namespace openscreen::cast { class CastMessageHandler; class ConnectionNamespaceHandler; // Handles CastSockets by routing received messages to appropriate message // handlers based on the VirtualConnection's local ID and sending messages over // the appropriate CastSocket for a VirtualConnection. // // Basic model for using this would be: // // 1. Foo is a SenderSocketFactory::Client. // // 2. Foo calls SenderSocketFactory::Connect, optionally with VCRouter as the // CastSocket::Client. // // 3. Foo gets OnConnected callback and makes whatever local notes it needs // (e.g. sink "resolved", init app probing state, etc.), then calls // VCRouter::TakeSocket. // // 4. Anything Foo wants to send (launch, app availability, etc.) goes through // VCRouter::Send via an appropriate VC. The virtual connection is not // created automatically, so AddConnection() must be called first. // // 5. Anything Foo wants to receive must be registered with a handler by calling // AddHandlerForLocalId(). // // 6. Foo is expected to clean-up after itself (#4 and #5) by calling // RemoveConnection() and RemoveHandlerForLocalId(). class VirtualConnectionRouter final : public CastSocket::Client { … }; } // namespace openscreen::cast #endif // CAST_COMMON_CHANNEL_VIRTUAL_CONNECTION_ROUTER_H_