private void HandlePinCountChanged(IDiffSpread <int> sender) { var count = Math.Max(1, CountIn[0]); ResizePinGroups(count, InputContainers, (i) => new InputAttribute(string.Format("Input {0}", i)) { AutoValidate = false }); ResizePinGroups(count, DefaultContainers, (i) => new InputAttribute(string.Format("Default {0}", i)) { AutoValidate = false }); ResizePinGroups(count, OutputContainers, (i) => new OutputAttribute(string.Format("Output {0}", i))); FBuffers.Resize( count, i => new Spread <T>(1), DisposeSpread ); }
public void Evaluate(int spreadMax) { FCopyOperations.Resize(spreadMax, i => new CopyOperation(FromFilenameIn[i], ToFilenameIn[i]), DisposeAndLogExceptions); ProgressOut.SliceCount = spreadMax; for (int i = 0; i < spreadMax; i++) { var copyOperation = FCopyOperations[i]; var from = FromFilenameIn[i]; var to = ToFilenameIn[i]; if (from != copyOperation.From || to != copyOperation.To || copyOperation.IsCompleted) { DisposeAndLogExceptions(copyOperation); copyOperation = new CopyOperation(from, to); ProgressOut[i] = 0; } var doCopy = DoCopyIn[i]; if (doCopy && !copyOperation.IsRunning) { copyOperation.Run(new Progress <float>(p => ProgressOut[i] = p)); } FCopyOperations[i] = copyOperation; } }
//called when data for any output pin is requested public void Evaluate(int SpreadMax) { var isClient = FIsLocalClient[0] || FHost.IsBoygroupClient; //set server and port if (FPort.IsChanged) { FServer.Resize(FPort.SliceCount, CreateServer, DeleteServer); for (int i = 0; i < FServer.SliceCount; i++) { FServer[i].Port = isClient ? FPort[i] + 1 : FPort[i]; } if (isClient) // store the time server { FRemoteServer = new IPEndPoint(IPAddress.Parse(FIsLocalClient[0] ? FServerIP[0] : FHost.BoygroupServerIP), FPort[0]); } } //read stream time lock (FLock) { FStreamTime = FTime[0]; FTimeStamp = FHost.RealTime; } //do the evaluation for client or server if (isClient) { ClientEvaluate(); } else { ServerEvaluate(); } }
public void Evaluate(int spreadMax) { FEnumerators.Resize( spreadMax, slice => { var keyboard = KeyboardIn[slice] ?? Keyboard.Empty; return(Subscribe(keyboard)); }, Unsubscribe ); EventTypeOut.SliceCount = spreadMax; KeyCodeOut.SliceCount = spreadMax; KeyCharOut.SliceCount = spreadMax; for (int bin = 0; bin < spreadMax; bin++) { var keyboard = KeyboardIn[bin] ?? Keyboard.Empty; var tuple = FEnumerators[bin]; if (keyboard != tuple.Item1) { Unsubscribe(tuple); tuple = Subscribe(keyboard); } var enumerator = tuple.Item2; var notifications = enumerator.MoveNext() ? enumerator.Current : FEmptyList; EventTypeOut[bin].SliceCount = notifications.Count; KeyCodeOut[bin].SliceCount = notifications.Count; KeyCharOut[bin].SliceCount = notifications.Count; for (int i = 0; i < notifications.Count; i++) { var notification = notifications[i]; EventTypeOut[bin][i] = notification.Kind; switch (notification.Kind) { case KeyNotificationKind.KeyDown: var keyDown = notification as KeyDownNotification; KeyCodeOut[bin][i] = (int)keyDown.KeyCode; KeyCharOut[bin][i] = null; break; case KeyNotificationKind.KeyPress: var keyPress = notification as KeyPressNotification; KeyCodeOut[bin][i] = 0; KeyCharOut[bin][i] = keyPress.KeyChar.ToString(); break; case KeyNotificationKind.KeyUp: var keyUp = notification as KeyUpNotification; KeyCodeOut[bin][i] = (int)keyUp.KeyCode; KeyCharOut[bin][i] = null; break; case KeyNotificationKind.DeviceLost: KeyCodeOut[bin][i] = 0; KeyCharOut[bin][i] = null; break; default: throw new NotImplementedException(); } } FEnumerators[bin] = tuple; } }
#pragma warning restore 649, 169 #endregion fields & pins //called when data for any output pin is requested public void Evaluate(int spreadMax) { FContent.SliceCount = spreadMax; FEOS.SliceCount = spreadMax; path.ResizeAndDismiss(spreadMax, () => string.Empty); lineWise.ResizeAndDismiss(spreadMax, (i) => FLineWise[i]); streamReader.Resize(spreadMax, (i) => new StreamReader(FInput[i]), (t) => t.Dispose()); for (int i = 0; i < spreadMax; i++) { //check if encoding has changed bool encodingChanged = false; System.Text.Encoding enc = System.Text.Encoding.Default; if (FEncoding.IsChanged) { if (FEncoding[i].Index > 0) { enc = Encoding.GetEncoding(FEncoding[i].Name); } encodingChanged = !(streamReader[i].CurrentEncoding != enc); } //initialize stream reader bool update = false; bool isValid = true; if (path[i] != FInput[i] || encodingChanged || FRead[i]) { try { streamReader[i].Dispose(); streamReader[i] = new StreamReader(FInput[i], enc); path[i] = FInput[i]; update = true; } catch { FContent[i] = string.Empty; FEOS[i] = true; isValid = false; } } //do the reading part if ((lineWise[i] != FLineWise[i] || FIndex.IsChanged || FCount.IsChanged || update) && isValid) { streamReader[i].DiscardBufferedData(); if (FLineWise[i]) { streamReader[i].BaseStream.Seek(0, SeekOrigin.Begin); int incr = 0; FContent[i] = string.Empty; while (incr < FIndex[i] + FCount[i] && !streamReader[i].EndOfStream) { string line = streamReader[i].ReadLine(); if (incr >= FIndex[i]) { FContent[i] += line + Environment.NewLine; } incr++; } if (incr > 0) //remove last \r\n { FContent[i] = FContent[i].Substring(0, FContent[i].Length - Environment.NewLine.Length); } } else { streamReader[i].BaseStream.Seek(FIndex[i], SeekOrigin.Begin); char[] buffer = new char[Math.Max(FCount[i], 0)]; int read = streamReader[i].ReadBlock(buffer, 0, buffer.Length); FContent[i] = new string(buffer); } FEOS[i] = streamReader[i].EndOfStream; } } }
public void Evaluate(int spreadMax) { FEnumerators.Resize( spreadMax, slice => { var mouse = MouseIn[slice] ?? Mouse.Empty; return(Subscribe(mouse)); }, Unsubscribe ); EventTypeOut.SliceCount = spreadMax; PositionOut.SliceCount = spreadMax; MouseWheelDeltaOut.SliceCount = spreadMax; ClickCountOut.SliceCount = spreadMax; LeftButtonOut.SliceCount = spreadMax; MiddleButtonOut.SliceCount = spreadMax; RightButtonOut.SliceCount = spreadMax; X1ButtonOut.SliceCount = spreadMax; X2ButtonOut.SliceCount = spreadMax; for (int bin = 0; bin < spreadMax; bin++) { var mouse = MouseIn[bin] ?? Mouse.Empty; var tuple = FEnumerators[bin]; if (mouse != tuple.Item1) { Unsubscribe(tuple); tuple = Subscribe(mouse); } var enumerator = tuple.Item2; var notifications = enumerator.MoveNext() ? enumerator.Current : FEmptyList; EventTypeOut[bin].SliceCount = notifications.Count; PositionOut[bin].SliceCount = notifications.Count; MouseWheelDeltaOut[bin].SliceCount = notifications.Count; ClickCountOut[bin].SliceCount = notifications.Count; LeftButtonOut[bin].SliceCount = notifications.Count; MiddleButtonOut[bin].SliceCount = notifications.Count; RightButtonOut[bin].SliceCount = notifications.Count; X1ButtonOut[bin].SliceCount = notifications.Count; X2ButtonOut[bin].SliceCount = notifications.Count; for (int i = 0; i < notifications.Count; i++) { var n = notifications[i]; EventTypeOut[bin][i] = n.Kind; PositionOut[bin][i] = n.Position.FromMousePoint(n.ClientArea); switch (n.Kind) { case MouseNotificationKind.MouseDown: case MouseNotificationKind.MouseUp: var mouseButton = n as MouseButtonNotification; MouseWheelDeltaOut[bin][i] = 0; ClickCountOut[bin][i] = 0; LeftButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Left) > 0; MiddleButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Middle) > 0; RightButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Right) > 0; X1ButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.XButton1) > 0; X2ButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.XButton2) > 0; break; case MouseNotificationKind.MouseMove: MouseWheelDeltaOut[bin][i] = 0; ClickCountOut[bin][i] = 0; LeftButtonOut[bin][i] = false; MiddleButtonOut[bin][i] = false; RightButtonOut[bin][i] = false; X1ButtonOut[bin][i] = false; X2ButtonOut[bin][i] = false; break; case MouseNotificationKind.MouseWheel: var mouseWheel = n as MouseWheelNotification; MouseWheelDeltaOut[bin][i] = mouseWheel.WheelDelta; ClickCountOut[bin][i] = 0; LeftButtonOut[bin][i] = false; MiddleButtonOut[bin][i] = false; RightButtonOut[bin][i] = false; X1ButtonOut[bin][i] = false; X2ButtonOut[bin][i] = false; break; case MouseNotificationKind.MouseClick: var mouseClick = n as MouseClickNotification; MouseWheelDeltaOut[bin][i] = 0; ClickCountOut[bin][i] = mouseClick.ClickCount; LeftButtonOut[bin][i] = (mouseClick.Buttons & MouseButtons.Left) > 0; MiddleButtonOut[bin][i] = (mouseClick.Buttons & MouseButtons.Middle) > 0; RightButtonOut[bin][i] = (mouseClick.Buttons & MouseButtons.Right) > 0; X1ButtonOut[bin][i] = (mouseClick.Buttons & MouseButtons.XButton1) > 0; X2ButtonOut[bin][i] = (mouseClick.Buttons & MouseButtons.XButton2) > 0; break; default: throw new NotImplementedException(); } } FEnumerators[bin] = tuple; } }
public void Evaluate(int spreadMax) { DcdStateOut.SliceCount = spreadMax; CtsStateOut.SliceCount = spreadMax; DsrStateOut.SliceCount = spreadMax; RiStateOut.SliceCount = spreadMax; BreakStateOut.SliceCount = spreadMax; if (UpdatePortListIn.IsChanged && UpdatePortListIn[0]) { GlobalEnumManager.UpdatePortList(); } FPorts.Resize(spreadMax, CreatePort, DestroyPort); DataOut.ResizeAndDispose(spreadMax, () => new MemoryStream()); for (int i = 0; i < spreadMax; i++) { var port = FPorts[i]; // Get the in and output streams var dataIn = DataIn[i]; var dataOut = DataOut[i]; // Set stream positions back to the beginning dataIn.Seek(0, SeekOrigin.Begin); dataOut.Seek(0, SeekOrigin.Begin); try { if (EnabledIn[i]) { // Try to configure the port TryConfigurePort(port, i); // Open the port if (!port.IsOpen) { port.Open(); SetStates(i); } // Can only be set if port is open try { TrySetBreakState(port, BreakStateIn[i]); } catch (Exception e) { FLogger.Log(e); } // Write data to the port var totalBytesToWrite = dataIn.Length; if (totalBytesToWrite > 0 && DoSendIn[i]) { var buffer = new byte[1024]; while (totalBytesToWrite > 0) { var bytesToWrite = (int)Math.Min(buffer.Length, totalBytesToWrite); var bytesRead = dataIn.Read(buffer, 0, bytesToWrite); port.Write(buffer, 0, bytesRead); totalBytesToWrite -= bytesRead; } } // Read data from the port var totalBytesToRead = port.BytesToRead; if (totalBytesToRead > 0) { dataOut.SetLength(totalBytesToRead); var buffer = new byte[1024]; while (totalBytesToRead > 0) { var bytesToRead = Math.Min(buffer.Length, totalBytesToRead); var bytesRead = port.Read(buffer, 0, bytesToRead); dataOut.Write(buffer, 0, bytesRead); totalBytesToRead -= bytesRead; } // Marks the pin as changed DataOut[i] = dataOut; // Set the OnData flag OnDataOut[i] = true; } else { // Clear output if (dataOut.Length > 0) { dataOut.SetLength(0); // Marks the pin as changed DataOut[i] = dataOut; // Reset the OnData flag OnDataOut[i] = false; } } } else { // Close the port if (port.IsOpen) { port.Close(); UnsetStates(i); } // Clear output if (dataOut.Length > 0) { dataOut.SetLength(0); // Marks the pin as changed DataOut[i] = dataOut; // Reset the OnData flag OnDataOut[i] = false; } } // Read connection state ConnectedOut[i] = port.IsOpen; } catch (IOException e) { // Reset outputs DataOut[i].SetLength(0); UnsetStates(i); ConnectedOut[i] = false; // Log the exception FLogger.Log(e); } } }
public void Evaluate(int spreadMax) { FEnumerators.Resize( spreadMax, slice => { var mouse = MouseIn[slice] ?? Mouse.Empty; return(Subscribe(mouse)); }, Unsubscribe ); EventTypeOut.SliceCount = spreadMax; PositionOut.SliceCount = spreadMax; MouseWheelDeltaOut.SliceCount = spreadMax; LeftButtonOut.SliceCount = spreadMax; MiddleButtonOut.SliceCount = spreadMax; RightButtonOut.SliceCount = spreadMax; X1ButtonOut.SliceCount = spreadMax; X2ButtonOut.SliceCount = spreadMax; for (int bin = 0; bin < spreadMax; bin++) { var mouse = MouseIn[bin] ?? Mouse.Empty; var tuple = FEnumerators[bin]; if (mouse != tuple.Item1) { Unsubscribe(tuple); tuple = Subscribe(mouse); } var enumerator = tuple.Item2; var notifications = enumerator.MoveNext() ? enumerator.Current : FEmptyList; EventTypeOut[bin].SliceCount = notifications.Count; PositionOut[bin].SliceCount = notifications.Count; MouseWheelDeltaOut[bin].SliceCount = notifications.Count; LeftButtonOut[bin].SliceCount = notifications.Count; MiddleButtonOut[bin].SliceCount = notifications.Count; RightButtonOut[bin].SliceCount = notifications.Count; X1ButtonOut[bin].SliceCount = notifications.Count; X2ButtonOut[bin].SliceCount = notifications.Count; for (int i = 0; i < notifications.Count; i++) { var n = notifications[i]; EventTypeOut[bin][i] = n.Kind; var position = new Vector2D(n.Position.X, n.Position.Y); var clientArea = new Vector2D(n.ClientArea.Width - 1, n.ClientArea.Height - 1); PositionOut[bin][i] = VMath.Map(position, Vector2D.Zero, clientArea, new Vector2D(-1, 1), new Vector2D(1, -1), TMapMode.Float); switch (n.Kind) { case MouseNotificationKind.MouseDown: case MouseNotificationKind.MouseUp: var mouseButton = n as MouseButtonNotification; MouseWheelDeltaOut[bin][i] = 0; LeftButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Left) > 0; MiddleButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Middle) > 0; RightButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.Right) > 0; X1ButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.XButton1) > 0; X2ButtonOut[bin][i] = (mouseButton.Buttons & MouseButtons.XButton2) > 0; break; case MouseNotificationKind.MouseMove: MouseWheelDeltaOut[bin][i] = 0; LeftButtonOut[bin][i] = false; MiddleButtonOut[bin][i] = false; RightButtonOut[bin][i] = false; X1ButtonOut[bin][i] = false; X2ButtonOut[bin][i] = false; break; case MouseNotificationKind.MouseWheel: var mouseWheel = n as MouseWheelNotification; MouseWheelDeltaOut[bin][i] = mouseWheel.WheelDelta; LeftButtonOut[bin][i] = false; MiddleButtonOut[bin][i] = false; RightButtonOut[bin][i] = false; X1ButtonOut[bin][i] = false; X2ButtonOut[bin][i] = false; break; default: throw new NotImplementedException(); } } FEnumerators[bin] = tuple; } }
public void Evaluate(int spreadMax) { DcdStateOut.SliceCount = spreadMax; CtsStateOut.SliceCount = spreadMax; DsrStateOut.SliceCount = spreadMax; RiStateOut.SliceCount = spreadMax; BreakStateOut.SliceCount = spreadMax; if (UpdatePortListIn.IsChanged && UpdatePortListIn[0]) { UpdatePortList(); } FPorts.Resize(spreadMax, CreatePort, DestroyPort); DataOut.ResizeAndDispose(spreadMax, () => new MemoryStream()); for (int i = 0; i < spreadMax; i++) { var port = FPorts[i]; // Configure the port var portName = ComPortIn[i].Name; if (port.PortName != portName) { port.PortName = portName; } if (port.BaudRate != BaudRateIn[i]) { port.BaudRate = BaudRateIn[i]; } if (port.DataBits != DataBitsIn[i]) { port.DataBits = DataBitsIn[i]; } if (port.StopBits != StopBitsIn[i]) { port.StopBits = StopBitsIn[i]; } if (port.Parity != ParityIn[i]) { port.Parity = ParityIn[i]; } if (port.Handshake != HandshakeIn[i]) { port.Handshake = HandshakeIn[i]; } if (port.DtrEnable != DtrEnableIn[i]) { port.DtrEnable = DtrEnableIn[i]; } if (port.RtsEnable != RtsEnableIn[i]) { port.RtsEnable = RtsEnableIn[i]; } // Get the in and output streams var dataIn = DataIn[i]; var dataOut = DataOut[i]; // Set stream positions back to the beginning dataIn.Seek(0, SeekOrigin.Begin); dataOut.Seek(0, SeekOrigin.Begin); if (EnabledIn[i]) { // Open the port if (!port.IsOpen) { port.Open(); SetStates(i); } // Set the break state port.BreakState = BreakStateIn[i]; // Write data to the port var totalBytesToWrite = dataIn.Length; if (totalBytesToWrite > 0 && DoSendIn[i]) { var buffer = new byte[1024]; while (totalBytesToWrite > 0) { var bytesToWrite = (int)Math.Min(buffer.Length, totalBytesToWrite); var bytesRead = dataIn.Read(buffer, 0, bytesToWrite); port.Write(buffer, 0, bytesRead); totalBytesToWrite -= bytesRead; } } // Read data from the port var totalBytesToRead = port.BytesToRead; if (totalBytesToRead > 0) { dataOut.SetLength(totalBytesToRead); var buffer = new byte[1024]; while (totalBytesToRead > 0) { var bytesToRead = Math.Min(buffer.Length, totalBytesToRead); var bytesRead = port.Read(buffer, 0, bytesToRead); dataOut.Write(buffer, 0, bytesRead); totalBytesToRead -= bytesRead; } // Marks the pin as changed DataOut[i] = dataOut; // Set the OnData flag OnDataOut[i] = true; } else { // Clear output if (dataOut.Length > 0) { dataOut.SetLength(0); // Marks the pin as changed DataOut[i] = dataOut; // Reset the OnData flag OnDataOut[i] = false; } } } else { // Close the port if (port.IsOpen) { port.Close(); UnsetStates(i); } // Clear output if (dataOut.Length > 0) { dataOut.SetLength(0); // Marks the pin as changed DataOut[i] = dataOut; // Reset the OnData flag OnDataOut[i] = false; } } // Read connection state ConnectedOut[i] = port.IsOpen; } }