Hermes Down server封装记录

1 篇文章 0 订阅

Hermes 协议的封装是3年前的事了,写在这里一来是为分享,二来是为备忘,为纪念过去的那些日子。

  Hermes通迅被称为半导体、SMT行业三大标准协议之一,关于它的介绍,大家可以网上找找,全称为:IPC-HERMES-952,The global standard for "M2M in SMT assenmbly.  其重要性不言而喻。

接触hermes协议,也是一次机缘,在这里感恩领导的安排,经历半个月的通读Hermes协议源码,被作者的构思和严密的逻辑所吸引,至今,我认为TCP服务端和客户端写的最好的代码还是hermes。

Hermes 是什么鬼?简单的说就是TCP的服务端和客户端,支持断线重连机制,里面包含有udp,tcp(client,server),不过它们之间的通迅协议是一套标准,发什么,下一步收什么,一步一步都规定好了。

它的原版是一个C 型风格的动态库,不容易调用,使用者一时半会很难入手,因此二次封是必须的,目的是简化使用,整理出S上、下游的调用接口 和流程通迅接口的C++动态库,让使用者一目了然,又不用给项目增加各种环境兼容处理工作,总之就是化繁为简:

  以下便是二次封代码头文件部分:   

#pragma once
#include <functional>
#include <HermesData.h>
#ifdef LIBHERMES_EXPORTS
#define LIBHERMESDLL_API __declspec(dllexport)
#else
#define LIBHERMESDLL_API __declspec(dllimport)

#endif
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state,
    const HermesConnectionInfo* hercInfo)> HMS_connectedCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state,
    const HermesError* sdata)> HMS_disconnectCallback;
//----
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state,
    const HermesServiceDescriptionData* sdata)> HMS_servicesDescriptionCallback;
//
typedef std::function<void(void* m_pData, uint32_t sessionId, const HermesCheckAliveData* sdata)> HMS_checkAliveCallback;
//
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state)> HMS_stateCallback;
//
typedef std::function<void(void* m_pData, uint32_t sessionId, const HermesNotificationData* sdata)> HMS_notificationCallback;
typedef std::function<void(void* m_pData)> HMS_voidCallback;
typedef std::function<void(void* m_pData, unsigned sessionId, EHermesTraceType ehType, HermesStringView trace)> HMS_traceCallback;

//define over-------------------------------------------------------------------------------------------

//upstream--->DwonClient define
typedef std::function<void(void* m_pData, uint32_t sessionId, const HermesSendBoardInfoData* sdata)> HMS_sendBoardInfoCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesBoardAvailableData* sdata)> HMS_boardAvailableCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesRevokeBoardAvailableData* sdata)> HMS_revokeBoardAvailableCallback;
typedef std::function<void(void* m_pData, uint32_t, EHermesState state, const HermesTransportFinishedData* sdata)> HMS_transportFinishedCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesBoardForecastData* sdata)> HMS_boardForecastCallback;
//downstream--->upserver define below
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesMachineReadyData* sdata)> HMS_machineReadyCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesRevokeMachineReadyData* sdata)> HMS_revokeMachineReadyCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesStartTransportData* sdata)> HMS_startTransportCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, EHermesState state, const HermesStopTransportData* sdata)> HMS_stopTransportCallback;
typedef std::function<void(void* m_pData, uint32_t sessionId, const HermesQueryBoardInfoData* sdata)> HMS_queryBoardinfoCallback;
namespace LWHermes
{
    extern "C"
    {
        //Hermes upstream:
        LIBHERMESDLL_API void* __stdcall HDownCreate(std::string clientAddress, const int conport, std::string boardID, const int sessionID, std::string machinID);
        LIBHERMESDLL_API void __stdcall downsv_notification(void* downclient, std::string msg);
        LIBHERMESDLL_API void __stdcall downsv_sendXMLStr(void* downclient, std::string strXML);
        LIBHERMESDLL_API void __stdcall downsv_resetWithXMLStr(void* downclient, std::string strXML);
        LIBHERMESDLL_API void __stdcall downsv_reset(void* downclient, std::string strMsg);
        LIBHERMESDLL_API void __stdcall downsv_description(void* downclient);
        //                                downsv
        LIBHERMESDLL_API void __stdcall downsv_machineReady(void* downclient);
        LIBHERMESDLL_API void __stdcall downsv_revokeMachinReady(void* downclient);
        LIBHERMESDLL_API void __stdcall downsv_stopTransport(void* downclient);
        LIBHERMESDLL_API void __stdcall downsv_startTransport(void* downclient);
        LIBHERMESDLL_API void __stdcall downsv_checkAlive(void* downclient);
        LIBHERMESDLL_API void __stdcall downsv_queryBoardInfo(void* downclient);
        //-----

        LIBHERMESDLL_API void* __stdcall HUpCreate(std::string clientAddress, const int conport, std::string boardID, const int sessionID, std::string machinID);
        LIBHERMESDLL_API void __stdcall upct_reset(void* upserver, std::string strMsg);
        LIBHERMESDLL_API void __stdcall upct_resetWithXMLStr(void* upserver, std::string strXML);
        LIBHERMESDLL_API void __stdcall upct_sendXMLStr(void* upserver, std::string strXML);
        LIBHERMESDLL_API void __stdcall upct_notification(void* upserver, std::string msg);

        LIBHERMESDLL_API void __stdcall upct_description(void* upserver);    
        LIBHERMESDLL_API void __stdcall upct_boardAvaliable(void* upserver);
        LIBHERMESDLL_API void __stdcall upct_revokeBoardData(void* upserver);
        LIBHERMESDLL_API void __stdcall upct_transportFinished(void* upserver);
        //                                
        LIBHERMESDLL_API void __stdcall upct_boardForecast(void* upserver);
        LIBHERMESDLL_API void __stdcall upct_sendBoardInfo(void* upserver);
        LIBHERMESDLL_API void __stdcall upct_checkAlive(void* upserver);

        //downclient
        LIBHERMESDLL_API void __stdcall setShareObserverD1(void* downclient, HMS_connectedCallback _hc, HMS_disconnectCallback _hd, HMS_checkAliveCallback _hcha);
        LIBHERMESDLL_API void __stdcall setShareObserverD2(void* downclient, HMS_stateCallback _hst, HMS_voidCallback _hvod, HMS_traceCallback _htrac);
        LIBHERMESDLL_API void __stdcall setShareObserverD3(void* downclient, HMS_servicesDescriptionCallback _hsec, HMS_notificationCallback _hnot);
        LIBHERMESDLL_API void __stdcall setShareObserverNoticationD(void* downclient, HMS_notificationCallback _noct);
        //
        LIBHERMESDLL_API void __stdcall setObserver_down1(void* downclient, HMS_boardForecastCallback _hbsa, HMS_sendBoardInfoCallback _rba);
        LIBHERMESDLL_API void __stdcall setObserver_down2(void* downclient, HMS_boardAvailableCallback _hbsa, HMS_revokeBoardAvailableCallback _rba, HMS_transportFinishedCallback _htrsf);
        
        //Hermes upserver
        LIBHERMESDLL_API void __stdcall setShareObserverU1(void* upserver, HMS_connectedCallback _hc, HMS_disconnectCallback _hd, HMS_checkAliveCallback _hcha);
        LIBHERMESDLL_API void __stdcall setShareObserverU2(void* upserver, HMS_stateCallback _hst, HMS_voidCallback _hvod, HMS_traceCallback _htrac);
        LIBHERMESDLL_API void __stdcall setShareObserverU3(void* upserver, HMS_servicesDescriptionCallback _hsec, HMS_notificationCallback _hnot);
        LIBHERMESDLL_API void __stdcall setShareObserverNoticationU(void* upserver, HMS_notificationCallback _noct);//    
        LIBHERMESDLL_API void __stdcall setObserver_up1(void* upserver, HMS_machineReadyCallback _hbsa, HMS_startTransportCallback _rba, HMS_stopTransportCallback _rs);
        LIBHERMESDLL_API void __stdcall setObserver_up2(void* upserver, HMS_queryBoardinfoCallback _hbsa, HMS_revokeMachineReadyCallback _rba);


    }
}

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海木漄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值