private void GetStateTableSink(System.String DeviceUDN, System.String ServiceID, out System.Byte[] Variables)
 {
     foreach (UPnPDevice d in ShareList)
     {
         UPnPDevice _D = d.GetDevice(DeviceUDN);
         if (_D != null)
         {
             UPnPService s = _D.GetService(ServiceID);
             if (s != null)
             {
                 ArrayList t = new ArrayList();
                 foreach (UPnPStateVariable V in s.GetStateVariables())
                 {
                     if (V.SendEvent)
                     {
                         t.Add(new UPnPArgument(V.Name, UPnPService.SerializeObjectInstance(V.Value)));
                     }
                 }
                 Variables = Gatekeeper.BuildArguments((UPnPArgument[])t.ToArray(typeof(UPnPArgument)));
                 return;
             }
         }
     }
     throw(new UPnPCustomException(800, "No Match"));
 }
        private void InvokeSink(UPnPAction sender, UPnPArgument[] _Args, out object RetVal, out UPnPArgument[] _OutArgs)
        {
            string DeviceUDN = (string)ReverseUDNTable[sender.ParentService.ParentDevice.UniqueDeviceName];
            string ServiceID = sender.ParentService.ServiceID;

            byte[] InArgs = Gatekeeper.BuildArguments(_Args);
            //byte[] OutArgs;

            ++ActionCounter;
            if (this.OnAction != null)
            {
                OnAction(this, ActionCounter);
            }

            int Handle = Creator.GetNewHandle();

            Creator.InvokeLaterTable[Handle] = ILCB;
            PendingActionTable[Handle]       = sender;
            CP.InvokeAsync(DV, DeviceUDN, ServiceID, sender.Name, InArgs, Handle);

            UPnPArgument[] Args;
            sender.ParentService.DelayInvokeRespose(0, out Args);
            throw (new DelayedResponseException());

            /*
             * CP.Sync_Invoke(DeviceUDN,ServiceID,sender.Name,
             *  InArgs, out OutArgs);
             *
             * UPnPArgument[] Outputs = Gatekeeper.ParseArguments(OutArgs);
             * ArrayList alist = new ArrayList();
             * RetVal = null;
             *
             *
             * foreach(UPnPArgument A in Outputs)
             * {
             *  if(A.IsReturnValue)
             *  {
             *      RetVal = A.DataValue;
             *  }
             *  else
             *  {
             *      alist.Add(A);
             *  }
             * }
             *
             * _OutArgs = (UPnPArgument[])alist.ToArray(typeof(UPnPArgument));
             */
        }