e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
70 lines
2.5 KiB
C#
70 lines
2.5 KiB
C#
//----------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//----------------------------------------------------------------
|
|
namespace System.ServiceModel.Discovery
|
|
{
|
|
using System.Xml;
|
|
using System.Runtime;
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
|
class AnnouncementSendsAsyncResult : RandomDelaySendsAsyncResult
|
|
{
|
|
AnnouncementClient announcementClient;
|
|
Collection<EndpointDiscoveryMetadata> publishedEndpoints;
|
|
Collection<UniqueId> messageIds;
|
|
bool online;
|
|
|
|
internal AnnouncementSendsAsyncResult(
|
|
AnnouncementClient announcementClient,
|
|
Collection<EndpointDiscoveryMetadata> publishedEndpoints,
|
|
Collection<UniqueId> messageIds,
|
|
bool online,
|
|
TimeSpan maxDelay,
|
|
Random random,
|
|
AsyncCallback callback,
|
|
object state)
|
|
: base(publishedEndpoints.Count, maxDelay, announcementClient, random, callback, state)
|
|
{
|
|
Fx.Assert(publishedEndpoints.Count == messageIds.Count, "There must be one message Ids for each EndpointDiscoveryMetadata.");
|
|
this.announcementClient = announcementClient;
|
|
this.publishedEndpoints = publishedEndpoints;
|
|
this.messageIds = messageIds;
|
|
this.online = online;
|
|
}
|
|
|
|
protected override IAsyncResult OnBeginSend(int index, TimeSpan timeout, AsyncCallback callback, object state)
|
|
{
|
|
using (new OperationContextScope(this.announcementClient.InnerChannel))
|
|
{
|
|
OperationContext.Current.OutgoingMessageHeaders.MessageId = this.messageIds[index];
|
|
|
|
if (this.online)
|
|
{
|
|
return this.announcementClient.BeginAnnounceOnline(this.publishedEndpoints[index], callback, state);
|
|
}
|
|
else
|
|
{
|
|
return this.announcementClient.BeginAnnounceOffline(this.publishedEndpoints[index], callback, state);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void OnEndSend(IAsyncResult result)
|
|
{
|
|
if (this.online)
|
|
{
|
|
this.announcementClient.EndAnnounceOnline(result);
|
|
}
|
|
else
|
|
{
|
|
this.announcementClient.EndAnnounceOffline(result);
|
|
}
|
|
}
|
|
public static void End(IAsyncResult result)
|
|
{
|
|
AsyncResult.End<AnnouncementSendsAsyncResult>(result);
|
|
}
|
|
}
|
|
}
|