private void InvokeResponseSink(int ErrorCode, string ErrorString, byte[] Args, int Handle) { try { UPnPAction A = (UPnPAction)this.PendingActionTable[Handle]; PendingActionTable.Remove(Handle); if (ErrorCode == 0) { UPnPArgument[] OutArgs = Gatekeeper.ParseArguments(Args); object RetObj = null; if (A.HasReturnValue) { UPnPArgument RA = A.GetRetArg(); foreach (UPnPArgument OA in OutArgs) { if (OA.Name == RA.Name) { RetObj = OA.DataValue; break; } } } A.ParentService.DelayedInvokeResponse(0, RetObj, OutArgs, null); } else { A.ParentService.DelayedInvokeResponse(0, null, null, new UPnPCustomException(ErrorCode, ErrorString)); } } catch (Exception) { } }
private void GetStateTableSink(CpGateKeeper sender, System.String DeviceUDN, System.String ServiceID, System.Byte[] Variables, UPnPInvokeException e, object _Tag) { UPnPService s = (UPnPService)_Tag; UPnPArgument[] Vars = Gatekeeper.ParseArguments(Variables); foreach (UPnPArgument var in Vars) { (new UPnPDebugObject(s)).SetProperty("ValidationMode", false); s.SetStateVariable(var.Name, var.DataValue); } if (Interlocked.Decrement(ref InitCounter) == 0) { ProxyDevice.StartDevice(); } if (Vars.Length > 0) { EventCounter += Vars.Length; if (this.OnEvent != null) { OnEvent(this, EventCounter); } } }