private void mstp_thread()
{
try
{
StateChanges state_change = StateChanges.Reset;
while (m_port != null)
{
if (StateLogging) Trace.WriteLine(state_change.ToString(), null);
switch (state_change)
{
case StateChanges.Reset:
state_change = Initialize();
break;
case StateChanges.DoneInitializing:
case StateChanges.ReceivedUnexpectedFrame:
case StateChanges.Reply:
case StateChanges.DeferredReply:
case StateChanges.SawTokenUser:
state_change = Idle();
break;
case StateChanges.GenerateToken:
case StateChanges.FindNewSuccessor:
case StateChanges.SendMaintenancePFM:
case StateChanges.SoleMasterRestartMaintenancePFM:
case StateChanges.NextStationUnknown:
state_change = PollForMaster();
break;
case StateChanges.DoneWithPFM:
case StateChanges.ResetMaintenancePFM:
case StateChanges.ReceivedReplyToPFM:
case StateChanges.SendToken:
state_change = PassToken();
break;
case StateChanges.ReceivedDataNeedingReply:
state_change = AnswerDataRequest();
break;
case StateChanges.ReceivedToken:
case StateChanges.SoleMaster:
case StateChanges.DeclareSoleMaster:
case StateChanges.SendAnotherFrame:
state_change = UseToken();
break;
case StateChanges.NothingToSend:
case StateChanges.SendNoWait:
case StateChanges.ReplyTimeOut:
case StateChanges.InvalidFrame:
case StateChanges.ReceivedReply:
case StateChanges.ReceivedPostpone:
state_change = DoneWithToken();
break;
case StateChanges.SendAndWait:
state_change = WaitForReply();
break;
}
}
Trace.WriteLine("MSTP thread is closing down", null);
}
catch (Exception ex)
{
Trace.TraceError("Exception in MSTP thread: " + ex.Message);
}
}