private decimal[] _MapArgValues() { var vals = new decimal[VarCount]; if (vals.Length > 0) { foreach (var s in _localVariables) { Variable <decimal> v; if (!LocalVariables.TryGet(s, out v)) { _nan = true; return(null); } vals[_ms.ArgIndex(v.Name)] = v.Value; } if (_remoteVariables.Count > 0) { int i = 0; var packets = new VarPacket[_remoteVariables.Count]; foreach (var vs in _remoteVariables) { packets[i++] = VarPacket.CreateReadRequest(this, new IPEndPoint(vs.Key, _communicator.Port), vs.Value); } _receivedVars = new List <VarPacket>(packets.Length); foreach (var p in packets) { _communicator.Send(p); } while (_receivedVars.Count < packets.Length && _errors.Count == 0 && !_nan) { Thread.Sleep(1); if (_cancel) { _errors.Add("Cancelled."); return(null); } } if (_errors.Count > 0 || _nan) { return(null); } for (i = 0; i < packets.Length; ++i) { if (!_receivedVars[i].IsReadResponseOk) { _nan = true; _errors.Add("Host at " + packets[i].EndPoint + " returned NaN."); return(null); } var ip = packets[i].EndPoint.Address; var names = packets[i].RequestVarNames; var values = _receivedVars[i].ReadResponseVarValues; for (int j = 0; j < names.Length; ++j) { vals[_ms.ArgIndex("{" + ip.ToString() + "}." + names[j])] = values[j]; } } _receivedVars = null; } } return(vals); }
public Enumerator(LocalVariables variables) { _enumerator = variables._variables.GetEnumerator(); }