#pragma once
#include "CRightPick.h"
#include "CLeftPick.h"
#include "CDieBond.h"
#include "CDispath.h"

class  __declspec(dllexport) CDieBondFsm
{
    enum FSM {
        LeftPick_thread = 0,
        RightPick_thread,
        DieBond_thread,
        Dispath_thread,
        MAX_FSM
    };

private:
    CFsmBase* pFsmArray[MAX_FSM];
    static std::mutex m_Mutex;
    static CDieBondFsm* m_pDieBondFsm;
    static DWORD WINAPI threadRun(LPVOID pThreadPara);

    bool m_bIsLoopRunting;  //����ѭ��������
public:
    CDieBondFsm();
    static LONG GetInstance(CDieBondFsm** pDieBondFsm);

    bool GetRunting();
    void ExitFsm();
    void RunFsm();
    void StopFsm();
    void pause(bool b);

#pragma region ״̬������ӿ�
    //�޲���ͨ�ýӿ��¼�
    void send_event(DISPATH_STEP_TYPE msg);
    //���õ�ǰ�̾���Ϊ���һ�Ź̾���
    void SetCurrentPointToEnd();
    //���ñ����Զ��̾�������0Ϊ������
    void Step_SetBondDieTotal(UINT nBondDieTotal);
    
#pragma endregion

    
    
};