//------------------------------------------------------------------------------------------------------------------------ void VirtualOutputBatchMsgHandler(Logic.Blocks.Endpoints.Out.VirtualOutput.VirtualIOMsg[] ev) { try { //compile events var events = ev.Where(e => e.RemoteVirtualInputBlockKey.IsValid) .Select(e => new VirtualBlockEvent() { BlockKey = e.RemoteVirtualInputBlockKey, Indices = e.Indices, Values = e.Values.Select(v => v.ToJSON()).ToArray(), RevNum = e.Revision, }) .ToList(); if (events.Count == 0) return; //redirect vbm to a brothernode? if (Node.NodeDiscovery != null) { //send to events to local brother nodes (set will be consumed up to a point) Node.NodeDiscovery.SendVBMToBrothers(events); //if nothing left then done! if (events.Count == 0) return; } //send virtual block event msg var msg = new VirtualBlockEventMsg() { BlockEvents = events.ToArray(), }; Node.SendMessage(msg); } catch (Exception ex) { DebugEx.Assert(ex, "Unhandled exception caught"); } }