Example #1
0
        public bool MoveNext()
        {
            var ms = new MemoryStream();
            var bw = new BinaryWriter(ms);

            bw.Write((byte)CallMethod.IteratorNext);
            bw.Write(_enumerator.Target);
            bw.Flush();

            var res     = _connector.SendMessage(ms);
            var resCall = res.ReadBoolean();

            if (!resCall)
            {
                throw new Exception(res.ReadString());
            }

            var resNext = res.ReadBoolean();

            if (!resNext)
            {
                GC.SuppressFinalize(_enumerator);
                return(false);
            }

            Current = WorkVariants.GetObject(res, _connector);
            return(true);
        }
Example #2
0
        internal static bool GetResultWithChangeParams(BinaryReader res, ref object result, TCPClientConnector connector,
                                                       object[] args, int offset = 0)
        {
            if (!GetResult(res, ref result, connector))
            {
                return(false);
            }
            var count = res.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                var    index = res.ReadInt32();                        // Получим индекс измененного параметра
                object value = WorkVariants.GetObject(res, connector); // Получим значение измененного параметра

                // args[index + offset]= value;// Установим нужный параметр, для Generic методов с 0 индексом идет тип аргументов

                // Вариант с  RefParam
                object param = args[index + offset];
                if (param != null && param is RefParam refParam)
                {
                    refParam.Value = value;
                }
            }

            return(true);
        }
        private void SetEvent(BinaryReader br)
        {
            Guid key = new Guid(br.ReadBytes(16));
            var  res = WorkVariants.GetObject(br, this);
            WrapperObjectWithEvents value;

            if (EventDictionary.TryGetValue(key, out value))
            {
                value.RaiseEvent(key, res);
            }
        }
Example #4
0
        internal static bool GetResult(BinaryReader res, ref object result, TCPClientConnector connector)
        {
            var resRun      = res.ReadBoolean();
            var returnValue = WorkVariants.GetObject(res, connector);

            if (!resRun)
            {
                if (returnValue != null && returnValue is string stringValue)
                {
                    connector.LastError = stringValue;
                }
                return(false);
            }

            result = returnValue;
            return(true);
        }
        private void SetAsyncResult(BinaryReader br)
        {
            Guid key    = new Guid(br.ReadBytes(16));
            var  res    = br.ReadBoolean();
            var  resObj = WorkVariants.GetObject(br, this);
            TaskCompletionSource <object> value;

            if (AsyncDictionary.TryGetValue(key, out value))
            {
                if (res)
                {
                    value.SetResult(resObj);
                }
                else
                {
                    value.TrySetException(new Exception((string)resObj));
                }
            }
        }