mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-06-27 13:33:13 +00:00
AsyncReply is awaitable
This commit is contained in:
@ -50,7 +50,7 @@ namespace Esiur.Net.IIP
|
||||
|
||||
Dictionary<Guid, ResourceTemplate> templates = new Dictionary<Guid, ResourceTemplate>();
|
||||
|
||||
KeyList<uint, AsyncReply> requests = new KeyList<uint, AsyncReply>();
|
||||
KeyList<uint, IAsyncReply<object>> requests = new KeyList<uint, IAsyncReply<object>>();
|
||||
|
||||
uint callbackCounter = 0;
|
||||
|
||||
@ -62,7 +62,7 @@ namespace Esiur.Net.IIP
|
||||
/// <param name="action">Packet action.</param>
|
||||
/// <param name="args">Arguments to send.</param>
|
||||
/// <returns></returns>
|
||||
internal AsyncReply<object[]> SendRequest(IIPPacket.IIPPacketAction action, params object[] args)
|
||||
internal IAsyncReply<object[]> SendRequest(IIPPacket.IIPPacketAction action, params object[] args)
|
||||
{
|
||||
var reply = new AsyncReply<object[]>();
|
||||
callbackCounter++;
|
||||
@ -100,11 +100,11 @@ namespace Esiur.Net.IIP
|
||||
Send(bl.ToArray());
|
||||
}
|
||||
|
||||
internal AsyncReply SendInvokeByArrayArguments(uint instanceId, byte index, object[] parameters)
|
||||
internal AsyncReply<object> SendInvokeByArrayArguments(uint instanceId, byte index, object[] parameters)
|
||||
{
|
||||
var pb = Codec.ComposeVarArray(parameters, this, true);
|
||||
|
||||
var reply = new AsyncReply();
|
||||
var reply = new AsyncReply<object>();
|
||||
callbackCounter++;
|
||||
var bl = new BinaryList((byte)(0x40 | (byte)Packets.IIPPacket.IIPPacketAction.InvokeFunctionArrayArguments),
|
||||
callbackCounter, instanceId, index, pb);
|
||||
@ -114,11 +114,11 @@ namespace Esiur.Net.IIP
|
||||
return reply;
|
||||
}
|
||||
|
||||
internal AsyncReply SendInvokeByNamedArguments(uint instanceId, byte index, Structure parameters)
|
||||
internal AsyncReply<object> SendInvokeByNamedArguments(uint instanceId, byte index, Structure parameters)
|
||||
{
|
||||
var pb = Codec.ComposeStructure(parameters, this, true, true, true);
|
||||
|
||||
var reply = new AsyncReply();
|
||||
var reply = new AsyncReply<object>();
|
||||
callbackCounter++;
|
||||
var bl = new BinaryList((byte)(0x40 | (byte)Packets.IIPPacket.IIPPacketAction.InvokeFunctionNamedArguments),
|
||||
callbackCounter, instanceId, index, pb);
|
||||
@ -129,12 +129,12 @@ namespace Esiur.Net.IIP
|
||||
}
|
||||
|
||||
|
||||
void SendError(AsyncReply.ErrorType type, uint callbackId, ushort errorCode, string errorMessage = "")
|
||||
void SendError(ErrorType type, uint callbackId, ushort errorCode, string errorMessage = "")
|
||||
{
|
||||
var msg = DC.ToBytes(errorMessage);
|
||||
if (type == AsyncReply.ErrorType.Management)
|
||||
if (type == ErrorType.Management)
|
||||
SendParams((byte)(0xC0 | (byte)IIPPacket.IIPPacketReport.ManagementError), callbackId, errorCode);
|
||||
else if (type == AsyncReply.ErrorType.Exception)
|
||||
else if (type == ErrorType.Exception)
|
||||
SendParams((byte)(0xC0 | (byte)IIPPacket.IIPPacketReport.ExecutionError), callbackId, errorCode, (ushort)msg.Length, msg);
|
||||
}
|
||||
|
||||
@ -165,13 +165,13 @@ namespace Esiur.Net.IIP
|
||||
});
|
||||
}
|
||||
|
||||
void IIPReportError(uint callbackId, AsyncReply.ErrorType errorType, ushort errorCode, string errorMessage)
|
||||
void IIPReportError(uint callbackId, ErrorType errorType, ushort errorCode, string errorMessage)
|
||||
{
|
||||
var req = requests.Take(callbackId);
|
||||
req?.TriggerError(new AsyncException(errorType, errorCode, errorMessage));
|
||||
}
|
||||
|
||||
void IIPReportProgress(uint callbackId, AsyncReply.ProgressType type, int value, int max)
|
||||
void IIPReportProgress(uint callbackId, ProgressType type, int value, int max)
|
||||
{
|
||||
var req = requests[callbackId];
|
||||
req?.TriggerProgress(type, value, max);
|
||||
@ -379,7 +379,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (res.Instance.Applicable(session, ActionType.Attach, null) == Ruling.Denied)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, 6);
|
||||
SendError(ErrorType.Management, callback, 6);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -415,7 +415,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
// reply failed
|
||||
//SendParams(0x80, r.Instance.Id, r.Instance.Age, r.Instance.Serialize(false, this));
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -459,7 +459,7 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// reply failed
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -480,7 +480,7 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// reply failed
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -492,20 +492,20 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (store == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.StoreNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.StoreNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(store is IStore))
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceIsNotStore);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceIsNotStore);
|
||||
return;
|
||||
}
|
||||
|
||||
// check security
|
||||
if (store.Instance.Applicable(session, ActionType.CreateResource, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.CreateDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.CreateDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -517,7 +517,7 @@ namespace Esiur.Net.IIP
|
||||
if (parent != null)
|
||||
if (parent.Instance.Applicable(session, ActionType.AddChild, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -537,7 +537,7 @@ namespace Esiur.Net.IIP
|
||||
|
||||
if (type == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ClassNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ClassNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -614,13 +614,13 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (r.Instance.Store.Instance.Applicable(session, ActionType.Delete, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.DeleteDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.DeleteDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -628,7 +628,7 @@ namespace Esiur.Net.IIP
|
||||
SendReply(IIPPacket.IIPPacketAction.DeleteResource, callback);
|
||||
//SendParams((byte)0x84, callback);
|
||||
else
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.DeleteFailed);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.DeleteFailed);
|
||||
});
|
||||
}
|
||||
|
||||
@ -638,14 +638,14 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
// if (!r.Instance.Store.Instance.Applicable(r, session, ActionType.InquireAttributes, null))
|
||||
if (r.Instance.Applicable(session, ActionType.InquireAttributes, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ViewAttributeDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ViewAttributeDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -660,7 +660,7 @@ namespace Esiur.Net.IIP
|
||||
SendReply(all ? IIPPacket.IIPPacketAction.GetAllAttributes : IIPPacket.IIPPacketAction.GetAttributes, callback,
|
||||
Codec.ComposeStructure(st, this, true, true, true));
|
||||
else
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.GetAttributesFailed);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.GetAttributesFailed);
|
||||
|
||||
});
|
||||
}
|
||||
@ -671,7 +671,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (parent == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -679,19 +679,19 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (child == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (parent.Instance.Applicable(this.session, ActionType.AddChild, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
if (child.Instance.Applicable(this.session, ActionType.AddParent, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.AddParentDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.AddParentDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -710,7 +710,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (parent == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -718,19 +718,19 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (child == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (parent.Instance.Applicable(this.session, ActionType.RemoveChild, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.AddChildDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
if (child.Instance.Applicable(this.session, ActionType.RemoveParent, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.AddParentDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.AddParentDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -749,13 +749,13 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (resource == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (resource.Instance.Applicable(this.session, ActionType.Rename, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.RenameDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.RenameDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -771,7 +771,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (resource == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -789,7 +789,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (resource == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -807,13 +807,13 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (r.Instance.Store.Instance.Applicable(session, ActionType.UpdateAttributes, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -825,7 +825,7 @@ namespace Esiur.Net.IIP
|
||||
if (r.Instance.RemoveAttributes(attrs))
|
||||
SendReply(all ? IIPPacket.IIPPacketAction.ClearAllAttributes : IIPPacket.IIPPacketAction.ClearAttributes, callback);
|
||||
else
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeFailed);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeFailed);
|
||||
|
||||
});
|
||||
}
|
||||
@ -836,13 +836,13 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r == null)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
return;
|
||||
}
|
||||
|
||||
if (r.Instance.Store.Instance.Applicable(session, ActionType.UpdateAttributes, null) != Ruling.Allowed)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeDenied);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -852,7 +852,7 @@ namespace Esiur.Net.IIP
|
||||
SendReply(clearAttributes ? IIPPacket.IIPPacketAction.ClearAllAttributes : IIPPacket.IIPPacketAction.ClearAttributes,
|
||||
callback);
|
||||
else
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeFailed);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.UpdateAttributeFailed);
|
||||
});
|
||||
|
||||
});
|
||||
@ -868,7 +868,7 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// reply failed
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -882,7 +882,7 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// reply failed
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -899,7 +899,7 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// reply failed
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.TemplateNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -916,7 +916,7 @@ namespace Esiur.Net.IIP
|
||||
var list = r.Where(x => x.Instance.Applicable(session, ActionType.Attach, null) != Ruling.Denied).ToArray();
|
||||
|
||||
if (list.Length == 0)
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
else
|
||||
SendReply(IIPPacket.IIPPacketAction.QueryLink, callback, Codec.ComposeResourceArray(list, this, true));
|
||||
//}
|
||||
@ -973,7 +973,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r.Instance.Applicable(session, ActionType.Execute, ft) == Ruling.Denied)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback,
|
||||
SendError(ErrorType.Management, callback,
|
||||
(ushort)ExceptionCode.InvokeDenied);
|
||||
return;
|
||||
}
|
||||
@ -1009,7 +1009,7 @@ namespace Esiur.Net.IIP
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, 0, ex.ToString());
|
||||
SendError(ErrorType.Exception, callback, 0, ex.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1038,14 +1038,15 @@ namespace Esiur.Net.IIP
|
||||
//await t;
|
||||
//SendParams((byte)0x90, callback, Codec.Compose(res, this));
|
||||
}
|
||||
else if (rt is AsyncReply) //(rt.GetType().IsGenericType && (rt.GetType().GetGenericTypeDefinition() == typeof(AsyncReply<>)))
|
||||
else if (rt.GetType().GetTypeInfo().IsGenericType
|
||||
&& rt.GetType().GetGenericTypeDefinition() == typeof(IAsyncReply<>))
|
||||
{
|
||||
(rt as AsyncReply).Then(res =>
|
||||
(rt as IAsyncReply<object>).Then(res =>
|
||||
{
|
||||
SendReply(IIPPacket.IIPPacketAction.InvokeFunctionArrayArguments, callback, Codec.Compose(res, this));
|
||||
}).Error(ex =>
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, (ushort)ex.Code, ex.Message);
|
||||
SendError(ErrorType.Exception, callback, (ushort)ex.Code, ex.Message);
|
||||
}).Progress((pt, pv, pm) =>
|
||||
{
|
||||
SendProgress(callback, pv, pm);
|
||||
@ -1119,7 +1120,7 @@ namespace Esiur.Net.IIP
|
||||
{
|
||||
if (r.Instance.Applicable(session, ActionType.Execute, ft) == Ruling.Denied)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback,
|
||||
SendError(ErrorType.Management, callback,
|
||||
(ushort)ExceptionCode.InvokeDenied);
|
||||
return;
|
||||
}
|
||||
@ -1150,7 +1151,7 @@ namespace Esiur.Net.IIP
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, 0, ex.ToString());
|
||||
SendError(ErrorType.Exception, callback, 0, ex.ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1177,14 +1178,16 @@ namespace Esiur.Net.IIP
|
||||
});
|
||||
|
||||
}
|
||||
else if (rt is AsyncReply)
|
||||
{
|
||||
(rt as AsyncReply).Then(res =>
|
||||
// else if (rt is AsyncReply)
|
||||
else if (rt.GetType().GetTypeInfo().IsGenericType
|
||||
&& rt.GetType().GetGenericTypeDefinition() == typeof(IAsyncReply<>))
|
||||
{
|
||||
(rt as IAsyncReply<object>).Then(res =>
|
||||
{
|
||||
SendReply(IIPPacket.IIPPacketAction.InvokeFunctionNamedArguments, callback, Codec.Compose(res, this));
|
||||
}).Error(ex =>
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, (ushort)ex.Code, ex.Message);
|
||||
SendError(ErrorType.Exception, callback, (ushort)ex.Code, ex.Message);
|
||||
}).Progress((pt, pv, pm) =>
|
||||
{
|
||||
SendProgress(callback, pv, pm);
|
||||
@ -1376,13 +1379,13 @@ namespace Esiur.Net.IIP
|
||||
|
||||
if (r.Instance.Applicable(session, ActionType.SetProperty, pt, this) == Ruling.Denied)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, (ushort)ExceptionCode.SetPropertyDenied);
|
||||
SendError(ErrorType.Exception, callback, (ushort)ExceptionCode.SetPropertyDenied);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!pi.CanWrite)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ReadOnlyProperty);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ReadOnlyProperty);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1405,14 +1408,14 @@ namespace Esiur.Net.IIP
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
SendError(AsyncReply.ErrorType.Exception, callback, 0, ex.Message);
|
||||
SendError(ErrorType.Exception, callback, 0, ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// pt found, pi not found, this should never happen
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.PropertyNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.PropertyNotFound);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1421,13 +1424,13 @@ namespace Esiur.Net.IIP
|
||||
else
|
||||
{
|
||||
// property not found
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.PropertyNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.PropertyNotFound);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// resource not found
|
||||
SendError(AsyncReply.ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
SendError(ErrorType.Management, callback, (ushort)ExceptionCode.ResourceNotFound);
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -1718,7 +1721,7 @@ namespace Esiur.Net.IIP
|
||||
|
||||
SendRequest(IIPPacket.IIPPacketAction.ResourceChildren, resource.Instance.Id).Then(ar =>
|
||||
{
|
||||
var d = (byte[])ar;
|
||||
var d = (byte[])ar[0];
|
||||
Codec.ParseResourceArray(d, 0, (uint)d.Length, this).Then(resources =>
|
||||
{
|
||||
rt.Trigger(resources);
|
||||
@ -1734,7 +1737,7 @@ namespace Esiur.Net.IIP
|
||||
|
||||
SendRequest(IIPPacket.IIPPacketAction.ResourceParents, resource.Instance.Id).Then(ar =>
|
||||
{
|
||||
var d = (byte[])ar;
|
||||
var d = (byte[])ar[0];
|
||||
Codec.ParseResourceArray(d, 0, (uint)d.Length, this).Then(resources =>
|
||||
{
|
||||
rt.Trigger(resources);
|
||||
|
Reference in New Issue
Block a user