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);
                }
            }
        }