本文整理汇总了C#中IChannel.SendNotificationAsync方法的典型用法代码示例。如果您正苦于以下问题:C# IChannel.SendNotificationAsync方法的具体用法?C# IChannel.SendNotificationAsync怎么用?C# IChannel.SendNotificationAsync使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IChannel
的用法示例。
在下文中一共展示了IChannel.SendNotificationAsync方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReceiveMessagesAsync
private async Task ReceiveMessagesAsync(IChannel channel, CancellationToken cancellationToken)
{
while (channel.State == SessionState.Established)
{
cancellationToken.ThrowIfCancellationRequested();
var message = await channel.ReceiveMessageAsync(cancellationToken);
IDictionary<string, Guid> instanceSessionDictionary;
if (message.To == null)
{
var notification = new Notification()
{
Id = message.Id,
Event = Event.Failed,
Reason = new Reason()
{
Code = ReasonCodes.VALIDATION_INVALID_RECIPIENTS,
Description = "Invalid destination"
}
};
await channel.SendNotificationAsync(notification);
}
else if (!_identityInstanceSessionIdDictionary.TryGetValue(message.To.ToIdentity(), out instanceSessionDictionary) ||
!instanceSessionDictionary.Any())
{
var notification = new Notification()
{
Id = message.Id,
Event = Event.Failed,
Reason = new Reason()
{
Code = ReasonCodes.ROUTING_DESTINATION_NOT_FOUND,
Description = "Destination not found"
}
};
await channel.SendNotificationAsync(notification);
}
else
{
Guid destinationSessionId;
if (!instanceSessionDictionary.TryGetValue(message.To.Instance, out destinationSessionId))
{
destinationSessionId = instanceSessionDictionary.First().Value;
}
IServerChannel destinationChannel;
if (_serverConnectedNodesDictionary.TryGetValue(destinationSessionId, out destinationChannel))
{
await destinationChannel.SendMessageAsync(message);
}
else
{
var notification = new Notification()
{
Id = message.Id,
Event = Event.Failed,
Reason = new Reason()
{
Code = ReasonCodes.DISPATCH_ERROR,
Description = "Destination session is unavailable"
}
};
await channel.SendNotificationAsync(notification);
}
}
}
}