static void ForwardCall <T, TResult>(RpcContext <T> rpcCtx, RpcOutput <T> rpcOutput) where T : class where TResult : class { var rpc = rpcOutput.Call((object)null, rpcCtx, (object)null, rpcCtx.Data); rpc.Success <TResult>((self, ctx, userCtx, res) => ctx.SendSuccess(res)); rpc.Failure((self, ctx, userCtx, ex) => ctx.SendFailure(ex)); }
private byte[] SerializeOutputParametersAsArray() { int num = 0; object[] array = new object[this.outputParameters.Count * 2]; foreach (KeyValuePair <RpcOutput, object> keyValuePair in this.outputParameters) { array[num++] = ExchangeCertificateRpc.SerializeObject(keyValuePair.Key); RpcOutput key = keyValuePair.Key; switch (key) { case RpcOutput.ExchangeCertList: array[num++] = this.SerializeListAsArray <ExchangeCertificate>(keyValuePair.Value as List <ExchangeCertificate>); break; case RpcOutput.ExchangeCert: array[num++] = ExchangeCertificateRpc.SerializeObject(((ExchangeCertificate)keyValuePair.Value).ExchangeCertificateAsArray()); break; default: switch (key) { case RpcOutput.TaskWarningList: array[num++] = this.SerializeListAsArray <LocalizedString>(keyValuePair.Value as List <LocalizedString>); break; case RpcOutput.TaskConfirmationList: array[num++] = this.SerializeDictionaryAsArray <AllowedServices, LocalizedString>(keyValuePair.Value as Dictionary <AllowedServices, LocalizedString>); break; default: array[num++] = ExchangeCertificateRpc.SerializeObject(keyValuePair.Value); break; } break; } } return(ExchangeCertificateRpc.SerializeObject(array)); }
internal Dictionary <RpcOutput, object> BuildOutputParameters(byte[] blob) { Dictionary <RpcOutput, object> dictionary = new Dictionary <RpcOutput, object>(); object[] array = (object[])this.DeserializeObject(blob, false); for (int i = 0; i < array.Length; i += 2) { RpcOutput rpcOutput = (RpcOutput)this.DeserializeObject((byte[])array[i], true); object obj = this.DeserializeObject((byte[])array[i + 1], true); if (obj != null) { RpcOutput rpcOutput2 = rpcOutput; switch (rpcOutput2) { case RpcOutput.ExchangeCertList: { List <ExchangeCertificate> list = new List <ExchangeCertificate>(); foreach (object obj2 in (object[])obj) { list.Add(new ExchangeCertificate((object[])this.DeserializeObject((byte[])obj2, true))); } obj = list; break; } case RpcOutput.ExchangeCert: obj = new ExchangeCertificate((object[])obj); break; default: switch (rpcOutput2) { case RpcOutput.TaskWarningList: { List <LocalizedString> list2 = new List <LocalizedString>(); foreach (object obj3 in (object[])obj) { list2.Add((LocalizedString)this.DeserializeObject((byte[])obj3, true)); } obj = list2; break; } case RpcOutput.TaskConfirmationList: { object[] array4 = (object[])obj; Dictionary <AllowedServices, LocalizedString> dictionary2 = new Dictionary <AllowedServices, LocalizedString>(); for (int l = 0; l < array4.Length; l += 2) { AllowedServices key = (AllowedServices)this.DeserializeObject((byte[])array4[l], true); LocalizedString value = (LocalizedString)this.DeserializeObject((byte[])array4[l + 1], true); dictionary2[key] = value; } obj = dictionary2; break; } } break; } } dictionary[rpcOutput] = obj; } return(dictionary); }