Пример #1
0
        public virtual bool fromMasterModule(Receive.Body.ReceiveRec transportData)
        {
            // Typically, AEODRS systems use node 100 for master (discovery) while IOP use 1
            bool fromMas = (transportData.getSourceID().getNodeID() == 1) || (transportData.getSourceID().getNodeID() == 100);

            return(fromMas);
        }
Пример #2
0
 public void ReceiveTransition(UpdateEvent msg, Receive.Body.ReceiveRec transportData)
 {
     transition_ = "ReceiveTransition";
     State.ReceiveTransition(this, msg, transportData);
     transition_ = "";
     return;
 }
Пример #3
0
 public void ReceiveTransition(ReportHeartbeatPulse msg, Receive.Body.ReceiveRec transportData)
 {
     transition_ = "ReceiveTransition";
     State.ReceiveTransition(this, msg, transportData);
     transition_ = "";
     return;
 }
Пример #4
0
 public void ReceiveTransition(ReportIdentification msg, Receive.Body.ReceiveRec transportData)
 {
     transition_ = "ReceiveTransition";
     State.ReceiveTransition(this, msg, transportData);
     transition_ = "";
     return;
 }
Пример #5
0
 public void ReceiveTransition(ReportServices msg, Receive.Body.ReceiveRec transportData)
 {
     transition_ = "ReceiveTransition";
     State.ReceiveTransition(this, msg, transportData);
     transition_ = "";
     return;
 }
Пример #6
0
 public void ReceiveTransition(GrantNodeID msg, Receive.Body.ReceiveRec transportData)
 {
     transition_ = "ReceiveTransition";
     State.ReceiveTransition(this, msg, transportData);
     transition_ = "";
     return;
 }
Пример #7
0
        public virtual void updateNodeIDAction(GrantNodeID msg, Receive.Body.ReceiveRec transportData)
        {
            // Convert incoming MAC to string
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < 7; i++)
            {
                sb.Append(((byte)msg.getBody().getGrantNodeIDRec().getRequesterID().getRequesterIDArrayField(i)).ToString("x2"));
                if (i < 6)
                {
                    sb.Append(":");
                }
            }
            Console.WriteLine("Got GrantNodeID message for " + sb);

            // Check the MAC address to see if this is for us.
            if (String.Compare(sb.ToString(), mac_string) == 0)
            {
                Console.WriteLine("Updating NodeID to " + msg.getBody().getGrantNodeIDRec().getNodeID() + " for MAC: " + sb);

                JausAddress id = new JausAddress((ushort)jausRouter.getJausAddress().getSubsystemID(),
                                                 (byte)msg.getBody().getGrantNodeIDRec().getNodeID(),
                                                 (byte)jausRouter.getJausAddress().getComponentID());
                jausRouter.updateJausID(id);
            }
            else
            {
                Console.WriteLine("Ignoring grant message since " + sb + " != " + mac_string);
            }
        }
Пример #8
0
        public virtual void StoreAddressAction(Receive.Body.ReceiveRec transportData)
        {
            Console.WriteLine("Storing address of controlling component as " +
                              (ushort)transportData.getSourceID().getSubsystemID(),
                              (byte)transportData.getSourceID().getNodeID(),
                              (byte)transportData.getSourceID().getComponentID());

            currentController = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                (byte)transportData.getSourceID().getNodeID(),
                                                (byte)transportData.getSourceID().getComponentID());
        }
Пример #9
0
        public virtual bool isControllingClient(Receive.Body.ReceiveRec transportData)
        {
            JausAddress requester = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                    (byte)transportData.getSourceID().getNodeID(),
                                                    (byte)transportData.getSourceID().getComponentID());

            if ((currentController != null) &&
                (requester.getSubsystemID() == currentController.getSubsystemID() &&
                 requester.getNodeID() == currentController.getNodeID() &&
                 requester.getComponentID() == currentController.getComponentID()))
            {
                return(true);
            }
            return(false);
        }
Пример #10
0
        public virtual void SendAction(string arg0, Receive.Body.ReceiveRec transportData)
        {
            if (arg0.CompareTo("ReportStatus") == 0)
            {
                ReportStatus status_msg = new ReportStatus();

                // Get the state from the context.  Note that since we are inside a transition, the "current state"
                // is ill-defined.  We instead use the state we left to execute this transition.  Recall that the state
                // is actually an amalgamation of all parent states, we're only concerned with the management
                string currentState = context.PreviousState.Name; //getPreviousState().getName();
                if (currentState.Contains("_"))
                {
                    currentState = currentState.Substring(currentState.LastIndexOf("_") + 1);
                }
                if (currentState.CompareTo("Init") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(0);
                }
                if (currentState.CompareTo("Ready") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(1);
                }
                if (currentState.CompareTo("Standby") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(2);
                }
                if (currentState.CompareTo("Shutdown") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(3);
                }
                if (currentState.CompareTo("Failure") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(4);
                }
                if (currentState.CompareTo("Emergency") == 0)
                {
                    status_msg.getBody().getReportStatusRec().setStatus(5);
                }

                Console.WriteLine("Sending ReportStatus: " + currentState);

                // Now send it to the requesting component
                JausAddress sender = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                     (byte)transportData.getSourceID().getNodeID(),
                                                     (byte)transportData.getSourceID().getComponentID());
                sendJausMessage(status_msg, sender);
            }
        }
Пример #11
0
        public virtual void updateSubsystemIDAction(Receive.Body.ReceiveRec transportData)
        {
            // Check to see if we already have a subsystem ID.  If so, nothing to do.
            if ((jausRouter.getJausAddress().getSubsystemID() != 0xFFFF) && (jausRouter.getJausAddress().getSubsystemID() != 0))
            {
                return;
            }

            // We need to update the JAUS ID
            Console.WriteLine("DiscoveryClient:: update subsystem ID to " + transportData.getSourceID().getSubsystemID());
            JausAddress id = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                             (byte)jausRouter.getJausAddress().getNodeID(),
                                             (byte)jausRouter.getJausAddress().getComponentID());

            // We now know (and can set) the subsystem ID, but we might still not know the Node ID.
            // Force the lower layers to accept that the ID might still contain wildcards using the
            // optional boolean argument
            jausRouter.updateJausID(id, true);
        }
Пример #12
0
        public virtual void registerServicesAction(Receive.Body.ReceiveRec transportData)
        {
            // Extract the sender information
            JausAddress sender = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                 (byte)transportData.getSourceID().getNodeID(),
                                                 (byte)transportData.getSourceID().getComponentID());

            // Found a discovery service.  Register our stuffs with it.
            RegisterServices register_msg = new RegisterServices();

            RegisterServices.RegisterServicesBody.ServiceList.ServiceRec service =
                new RegisterServices.RegisterServicesBody.ServiceList.ServiceRec();
            service.setMinorVersionNumber(1);
            service.setMajorVersionNumber(1);

            // Register local services
            service.setURI("urn:jaus:jss:core:Transport");
            register_msg.getRegisterServicesBody().getServiceList().addElement(service);

            // Send the actual message
            sendJausMessage(register_msg, sender);
        }
Пример #13
0
 public virtual void parseServiceListAction(ReportServices msg, Receive.Body.ReceiveRec transportData)
 {
     /// Insert User Code HERE
 }
Пример #14
0
 public virtual void handleMessageAction(ReportIdentification msg, Receive.Body.ReceiveRec transportData)
 {
     // Since we found a discovery service, register our local services
     registerServicesAction(transportData);
 }
Пример #15
0
        public void popWrapper_1014a7ff54cb3a51af2f80235d77d9d1(ClearEmergency msg, Receive.Body.ReceiveRec transportData)
        {
            string tempstr  = "Receiving_Ready_Controlled_NotAvailable_Emergency";
            string tempstr2 = context.peakTopStateStack();

            string[] leafStateTOK  = tempstr.Split(new char[] { '_' });
            string[] stackStateTOK = tempstr2.Split(new char[] { '_' });
            int      currentToken  = 0;

            if (tempstr2.CompareTo("Receiving_Ready_Controlled_NotAvailable_Emergency") == 0)
            {
                DeleteIDAction(transportData);
                return;
            }

            if (leafStateTOK[currentToken].CompareTo(stackStateTOK[currentToken]) != 0)
            {
                DeleteIDAction(transportData);
                return;
            }
            currentToken++;
            if (currentToken >= stackStateTOK.Length || currentToken >= leafStateTOK.Length)
            {
                Console.WriteLine("Problem with StringTokenizer.");
            }

            if (leafStateTOK[currentToken].CompareTo(stackStateTOK[currentToken]) != 0)
            {
                DeleteIDAction(transportData);
                return;
            }
            currentToken++;
            if (currentToken >= stackStateTOK.Length || currentToken >= leafStateTOK.Length)
            {
                Console.WriteLine("Problem with StringTokenizer.");
            }

            if (leafStateTOK[currentToken].CompareTo(stackStateTOK[currentToken]) != 0)
            {
                DeleteIDAction(transportData);
                return;
            }
            currentToken++;
            if (currentToken >= stackStateTOK.Length || currentToken >= leafStateTOK.Length)
            {
                Console.WriteLine("Problem with StringTokenizer.");
            }

            if (leafStateTOK[currentToken].CompareTo(stackStateTOK[currentToken]) != 0)
            {
                DeleteIDAction(transportData);
                return;
            }
            currentToken++;
            if (currentToken >= stackStateTOK.Length || currentToken >= leafStateTOK.Length)
            {
                Console.WriteLine("Problem with StringTokenizer.");
            }

            if (leafStateTOK[currentToken].CompareTo(stackStateTOK[currentToken]) != 0)
            {
                DeleteIDAction(transportData);
                return;
            }
            currentToken++;
            if (currentToken >= stackStateTOK.Length || currentToken >= leafStateTOK.Length)
            {
                Console.WriteLine("Problem with StringTokenizer.");
            }
        }
Пример #16
0
                protected internal override void ReceiveTransition(DiscoveryClient_ReceiveFSMContext context, ReportServices msg, Receive.Body.ReceiveRec transportData)
                {
                    DiscoveryClient_ReceiveFSM ctxt = context.Owner;


#if TRACE
                    Trace.WriteLine(
                        "LEAVING STATE   : DiscoveryClient_ReceiveFSM_SM.Receiving_Ready");
#endif

                    DiscoveryClient_ReceiveFSMState endState = context.State;

#if TRACE
                    Trace.WriteLine(
                        "ENTER TRANSITION: DiscoveryClient_ReceiveFSM_SM.DiscoveryClient_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, ReportServices msg, Receive.Body.ReceiveRec transportData)");
#endif

                    context.ClearState();

                    try
                    {
                        ctxt.parseServiceListAction(msg, transportData);
                    }
                    finally
                    {
#if TRACE
                        Trace.WriteLine(
                            "EXIT TRANSITION : DiscoveryClient_ReceiveFSM_SM.DiscoveryClient_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, ReportServices msg, Receive.Body.ReceiveRec transportData)");
#endif

                        context.State = endState;
                    }

                    return;
                }
Пример #17
0
                protected internal override void ReceiveTransition(DiscoveryClient_ReceiveFSMContext context, ReportHeartbeatPulse msg, Receive.Body.ReceiveRec transportData)
                {
                    DiscoveryClient_ReceiveFSM ctxt = context.Owner;


#if TRACE
                    Trace.WriteLine(
                        "LEAVING STATE   : DiscoveryClient_ReceiveFSM_SM.Receiving_Ready");
#endif

                    if (ctxt.fromMasterModule(transportData))
                    {
                        DiscoveryClient_ReceiveFSMState endState = context.State;

#if TRACE
                        Trace.WriteLine(
                            "ENTER TRANSITION: DiscoveryClient_ReceiveFSM_SM.DiscoveryClient_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, ReportHeartbeatPulse msg, Receive.Body.ReceiveRec transportData)");
#endif

                        context.ClearState();

                        try
                        {
                            ctxt.updateSubsystemIDAction(transportData);
                            ctxt.registerServicesAction(transportData);
                        }
                        finally
                        {
#if TRACE
                            Trace.WriteLine(
                                "EXIT TRANSITION : DiscoveryClient_ReceiveFSM_SM.DiscoveryClient_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, ReportHeartbeatPulse msg, Receive.Body.ReceiveRec transportData)");
#endif

                            context.State = endState;
                        }
                    }
                    else
                    {
                        base.ReceiveTransition(context, msg, transportData);
                    }

                    return;
                }
Пример #18
0
 protected internal virtual void ReceiveTransition(DiscoveryClient_ReceiveFSMContext context, ReportServices msg, Receive.Body.ReceiveRec transportData)
 {
     Default(context);
 }
Пример #19
0
 public virtual bool isControllingClient(Receive.Body.ReceiveRec transportData)
 {
     //// By default, inherited guards call the parent function.
     //// This can be replaced or modified as needed.
     return(pAccessControl_ReceiveFSM.isControllingClient(transportData));
 }
Пример #20
0
 public virtual bool isIDStored(Receive.Body.ReceiveRec transportData)
 {
     /// Insert User Code HERE
     return(true);
 }
Пример #21
0
 public virtual void DeleteIDAction(Receive.Body.ReceiveRec transportData)
 {
     /// Insert User Code HERE
 }
Пример #22
0
                protected internal override void ReceiveTransition(Events_ReceiveFSMContext context, UpdateEvent msg, Receive.Body.ReceiveRec transportData)
                {
                    Events_ReceiveFSM ctxt = context.Owner;


#if TRACE
                    Trace.WriteLine(
                        "TRANSITION   : Events_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, UpdateEvent msg, Receive.Body.ReceiveRec transportData)");
#endif

                    if (ctxt.isSupported(msg) && ctxt.eventExists(msg))
                    {
                        Events_ReceiveFSMState endState = context.State;

                        context.ClearState();

                        try
                        {
                            ctxt.updateEventAction(msg);
                            ctxt.SendAction("ConfirmEventRequest", msg, transportData);
                            ctxt.resetEventTimerAction();
                        }
                        finally
                        {
                            context.State = endState;
                        }
                    }
                    else if (!ctxt.isSupported(msg) || !ctxt.eventExists(msg))
                    {
                        Events_ReceiveFSMState endState = context.State;

                        context.ClearState();

                        try
                        {
                            ctxt.SendAction("RejectEventRequest", msg, transportData);
                        }
                        finally
                        {
                            context.State = endState;
                        }
                    }
                    else
                    {
                        base.ReceiveTransition(context, msg, transportData);
                    }

                    return;
                }
Пример #23
0
        //	This is the function that will process an event either generated
        //  by the service, sent to it by another service on the same component,
        //  or as a message sent by a different component.
        public override bool processTransitions(InternalEvent ie)
        {
            bool done = false;

            // Since this function can be called from multiple threads,
            // we use a mutex to ensure only one state transition is
            // active at a time.
            mutex.WaitOne();

            // Invoke the FSM transition for this event.
            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new QueryEvents().getID())
                    {
                        QueryEvents msg = new QueryEvents();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new QueryEventTimeout().getID())
                    {
                        QueryEventTimeout msg = new QueryEventTimeout();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new CreateEvent().getID())
                    {
                        CreateEvent msg = new CreateEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new CreateEvent().getID())
                    {
                        CreateEvent msg = new CreateEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new CreateEvent().getID())
                    {
                        CreateEvent msg = new CreateEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new UpdateEvent().getID())
                    {
                        UpdateEvent msg = new UpdateEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new UpdateEvent().getID())
                    {
                        UpdateEvent msg = new UpdateEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new CancelEvent().getID())
                    {
                        CancelEvent msg = new CancelEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new CancelEvent().getID())
                    {
                        CancelEvent msg = new CancelEvent();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pEvents_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("EventOccurred") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    EventOccurred casted_ie = (EventOccurred)ie;
                    pEvents_ReceiveFSM.context.EventOccurredTransition();
                    done = true;
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("EventError") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    EventError casted_ie = (EventError)ie;
                    pEvents_ReceiveFSM.context.EventErrorTransition();
                    done = true;
                }
            } catch (Exception e) {}

            try
            {
                if (ie.getName().CompareTo("Timeout") == 0 && (ie.getSource().CompareTo("Events_ReceiveFSM") != 0) && (!done))
                {
                    Timeout casted_ie = (Timeout)ie;
                    pEvents_ReceiveFSM.context.TimeoutTransition();
                    done = true;
                }
            } catch (Exception e) {}



            mutex.ReleaseMutex();
            return(done);
        }
Пример #24
0
 public virtual void SendAction(string arg0, QueryEventTimeout msg, Receive.Body.ReceiveRec transportData)
 {
     /// Insert User Code HERE
 }
Пример #25
0
        //	This is the function that will process an event either generated
        //  by the service, sent to it by another service on the same component,
        //  or as a message sent by a different component.
        public override bool processTransitions(InternalEvent ie)
        {
            bool done = false;

            // Since this function can be called from multiple threads,
            // we use a mutex to ensure only one state transition is
            // active at a time.
            mutex.WaitOne();

            // Invoke the FSM transition for this event.
            try
            {
                if ((!done) && ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("DiscoveryClient_ReceiveFSM") != 0))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new ReportHeartbeatPulse().getID())
                    {
                        ReportHeartbeatPulse msg = new ReportHeartbeatPulse();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pDiscoveryClient_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if ((!done) && ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("DiscoveryClient_ReceiveFSM") != 0))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new ReportServices().getID())
                    {
                        ReportServices msg = new ReportServices();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pDiscoveryClient_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if ((!done) && ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("DiscoveryClient_ReceiveFSM") != 0))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new ReportIdentification().getID())
                    {
                        ReportIdentification msg = new ReportIdentification();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pDiscoveryClient_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if ((!done) && ie.getName().CompareTo("Receive") == 0 && (ie.getSource().CompareTo("DiscoveryClient_ReceiveFSM") != 0))
                {
                    Receive casted_ie = (Receive)ie;
                    int     pos       = 0;
                    ushort  id        = BitConverter.ToUInt16(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                    if (id == new GrantNodeID().getID())
                    {
                        GrantNodeID msg = new GrantNodeID();
                        msg.decode(casted_ie.getBody().getReceiveRec().getMessagePayload().getData(), pos);
                        Receive.Body.ReceiveRec transportData = casted_ie.getBody().getReceiveRec();
                        pDiscoveryClient_ReceiveFSM.context.ReceiveTransition(msg, transportData);
                        done = true;
                    }
                }
            } catch (Exception e) {}

            try
            {
                if ((!done) && ie.getName().CompareTo("RHP_Timeout") == 0 && (ie.getSource().CompareTo("DiscoveryClient_ReceiveFSM") != 0))
                {
                    RHP_Timeout casted_ie = (RHP_Timeout)ie;
                    pDiscoveryClient_ReceiveFSM.context.RHP_TimeoutTransition();
                    done = true;
                }
            } catch (Exception e) {}



            mutex.ReleaseMutex();
            return(done);
        }
Пример #26
0
 protected internal virtual void ReceiveTransition(Events_ReceiveFSMContext context, UpdateEvent msg, Receive.Body.ReceiveRec transportData)
 {
     Default(context);
 }
Пример #27
0
        public virtual void SendAction(string arg0, string arg1, Receive.Body.ReceiveRec transportData)
        {
            if (arg0.CompareTo("RejectControl") == 0)
            {
                RejectControl reject_msg = new RejectControl();
                if (arg1.CompareTo("CONTROL_RELEASED") == 0)
                {
                    reject_msg.getBody().getRejectControlRec().setResponseCode(0);
                }
                if (arg1.CompareTo("NOT_ACCEPTED") == 0)
                {
                    reject_msg.getBody().getRejectControlRec().setResponseCode(1);
                }

                // Now send it to the requesting component
                JausAddress sender = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                     (byte)transportData.getSourceID().getNodeID(),
                                                     (byte)transportData.getSourceID().getComponentID());

                sendJausMessage(reject_msg, sender);
            }

            else if (arg0.CompareTo("ConfirmControl") == 0)
            {
                ConfirmControl confirm_msg  = new ConfirmControl();
                byte           responseCode = 0;
                if (arg1.CompareTo("CONTROL_ACCEPTED") == 0)
                {
                    responseCode = 0;
                }
                if (arg1.CompareTo("NOT_AVAILABLE") == 0)
                {
                    responseCode = 1;
                }
                if (arg1.CompareTo("INSUFFICIENT_AUTHORITY") == 0)
                {
                    responseCode = 2;
                }
                Console.WriteLine("Sending ConfirmControl with argument " + arg1);
                confirm_msg.getBody().getConfirmControlRec().setResponseCode(responseCode);

                // Now send it to the requesting component
                JausAddress sender = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                     (byte)transportData.getSourceID().getNodeID(),
                                                     (byte)transportData.getSourceID().getComponentID());
                sendJausMessage(confirm_msg, sender);
            }
            else if (arg0.CompareTo("ReportControl") == 0)
            {
                ReportControl control_msg = new ReportControl();
                control_msg.getBody().getReportControlRec().setSubsystemID((ushort)(
                                                                               (currentController == null) ? 0 : currentController.getSubsystemID()));
                control_msg.getBody().getReportControlRec().setNodeID((byte)(
                                                                          (currentController == null) ? 0 : currentController.getNodeID()));
                control_msg.getBody().getReportControlRec().setComponentID((byte)(
                                                                               (currentController == null) ? 0 : currentController.getComponentID()));

                // Now send it to the requesting component
                JausAddress sender = new JausAddress((ushort)transportData.getSourceID().getSubsystemID(),
                                                     (byte)transportData.getSourceID().getNodeID(),
                                                     (byte)transportData.getSourceID().getComponentID());
                sendJausMessage(control_msg, sender);
            }
        }
Пример #28
0
 public virtual void SendAction(string arg0, Receive.Body.ReceiveRec transportData)
 {
     /// Insert User Code HERE
 }
Пример #29
0
                protected internal override void ReceiveTransition(Events_ReceiveFSMContext context, QueryEvents msg, Receive.Body.ReceiveRec transportData)
                {
                    Events_ReceiveFSM ctxt = context.Owner;


#if TRACE
                    Trace.WriteLine(
                        "TRANSITION   : Events_ReceiveFSM_SM.Receiving_Ready.ReceiveTransition(, QueryEvents msg, Receive.Body.ReceiveRec transportData)");
#endif

                    Events_ReceiveFSMState endState = context.State;

                    context.ClearState();

                    try
                    {
                        ctxt.SendAction("ReportEvents", msg, transportData);
                    }
                    finally
                    {
                        context.State = endState;
                    }

                    return;
                }