fix(session): confirm routed delivery and keep playback state with the owner
This commit is contained in:
@@ -13,7 +13,7 @@ namespace Emby.Server.Implementations.Session;
|
||||
|
||||
/// <summary>
|
||||
/// Stands in for the websocket of a session another instance holds: messages are forwarded to that
|
||||
/// instance, which writes them to the connection it owns.
|
||||
/// instance, which writes them to the connection it owns and reports back whether it did.
|
||||
/// </summary>
|
||||
public sealed class RemoteSessionController : ISessionController
|
||||
{
|
||||
@@ -56,7 +56,7 @@ public sealed class RemoteSessionController : ISessionController
|
||||
Data = JsonSerializer.Serialize(data, JsonDefaults.Options)
|
||||
};
|
||||
|
||||
var delivered = await _bus.PublishAsync(
|
||||
var delivered = await _bus.RequestAsync(
|
||||
_ownerPod,
|
||||
new PodMessage
|
||||
{
|
||||
@@ -65,12 +65,12 @@ public sealed class RemoteSessionController : ISessionController
|
||||
},
|
||||
cancellationToken).ConfigureAwait(false);
|
||||
|
||||
if (delivered == 0)
|
||||
if (!delivered)
|
||||
{
|
||||
_logger.LogWarning("Instance {OwnerPod} holds session {SessionId} but is not listening; the {MessageType} message was not delivered.", _ownerPod, _sessionId, name);
|
||||
_logger.LogWarning("Instance {OwnerPod} did not write the {MessageType} message for session {SessionId} to a connection.", _ownerPod, name, _sessionId);
|
||||
|
||||
throw new ResourceNotFoundException(
|
||||
string.Format(CultureInfo.InvariantCulture, "The instance holding session {0} is unreachable.", _sessionId));
|
||||
string.Format(CultureInfo.InvariantCulture, "No instance holds a connection to session {0}.", _sessionId));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user