Ejemplo n.º 1
0
        //------------------------------------------------------------------------------------------------------------------------
        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"); }
        }