// Copyright Epic Games, Inc. All Rights Reserved. #include "zenserviceclient.h" #include "zen.h" #include #include #include #include namespace zen { ZenServiceClient::ZenServiceClient(Options Opts) : m_HostSpec(ZenCmdBase::ResolveTargetHostSpec(Opts.HostSpec)) , m_Http(ZenCmdBase::CreateHttpClient(m_HostSpec, Opts.HttpSettings)) { if (m_HostSpec.empty()) { throw OptionParseException("Unable to resolve server specification", {}); } SessionsServiceClient::Options SessionOpts{ .TargetUrl = m_HostSpec, .AppName = "zen", .Mode = std::move(Opts.CommandName), .SessionId = GetSessionId(), }; // For unix socket connections, forward the socket path to the sessions client if (ZenCmdBase::IsUnixSocketSpec(m_HostSpec)) { SessionOpts.TargetUrl = "http://localhost"; SessionOpts.ClientSettings.UnixSocketPath = m_HostSpec.substr(7); // strip "unix://" } m_Sessions = std::make_unique(std::move(SessionOpts)); m_Sessions->Announce(); m_LogSink = m_Sessions->CreateLogSink(); GetDefaultBroadcastSink()->AddSink(m_LogSink); } ZenServiceClient::~ZenServiceClient() { if (m_LogSink) { if (Ref Broadcast = GetDefaultBroadcastSink()) { Broadcast->RemoveSink(m_LogSink); } } } } // namespace zen