Here are the examples of the csharp api System.Threading.Tasks.TaskCompletionSource.TrySetResult(NetDataBufferReader) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
1 Examples
19
Source : SessionRequest.cs
with MIT License
from zestylife
with MIT License
from zestylife
public async Task OnReceive(
PacketProperty packetProperty,
DeliveryMethod deliveryMethod,
NetDataReader reader,
Func<ISession, NetDataReader, NetDataWriter, Task> onRequestReceive)
{
var requestType = (RequestType)reader.ReadByte();
int requestId = reader.ReadInt32();
_statistic.IncreaseResponseRpc(requestId);
switch (requestType)
{
case RequestType.Notification:
{
var writer = NetPool.DataWriterPool.Alloc();
try
{
await onRequestReceive(_session, reader, writer);
}
finally
{
NetPool.DataWriterPool.Free(writer);
}
}
break;
case RequestType.Request:
{
var writer = NetPool.DataWriterPool.Alloc();
try
{
var prePos = writer.Length;
writer.Write((byte)RequestType.ReplyWithResult);
writer.Write(requestId);
try
{
await onRequestReceive(_session, reader, writer);
}
catch (Exception ex)
{
writer.Length = prePos;
writer.Write((byte)RequestType.ReplyWithException);
writer.Write(requestId);
writer.Write(ex.ToString());
}
NetPacket packet = NetPool.PacketPool.Alloc(packetProperty, writer);
packet.DeliveryMethod = deliveryMethod;
_session.SendRawAsync(packet, packet.DeliveryMethod);
}
finally
{
NetPool.DataWriterPool.Free(writer);
}
}
break;
case RequestType.ReplyWithResult:
{
TaskCompletionSource<NetDataBufferReader> getTcs;
if (_responseWaitingItems.TryRemove(requestId, out getTcs) == false)
return;
NetDataBufferReader remainReader = new NetDataBufferReader(reader);
getTcs.TrySetResult(remainReader);
}
break;
case RequestType.ReplyWithException:
{
TaskCompletionSource<NetDataBufferReader> getTcs;
if (_responseWaitingItems.TryRemove(requestId, out getTcs) == false)
return;
getTcs.TrySetException(new Exception(reader.ReadString()));
}
break;
}
}