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); }
internal static bool GetResultWithChangeParams(BinaryReader res, ref object result, TcpConnector 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); }
internal static bool GetResult(BinaryReader res, ref object result, TcpConnector 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); }