pos機遠程刷卡步驟,VC實現遠程對象函數調用

 新聞資訊2  |   2023-06-06 09:16  |  投稿人:pos機之家

網上有很多關于pos機遠程刷卡步驟,VC實現遠程對象函數調用的知識,也有很多人為大家解答關于pos機遠程刷卡步驟的問題,今天pos機之家(www.www690aa.com)為大家整理了關于這方面的知識,讓我們一起來看下吧!

本文目錄一覽:

1、pos機遠程刷卡步驟

pos機遠程刷卡步驟

VC實現遠程對象方法調用及事件訂閱觸發,方便開發C/S系統

參考flash遠程共享對象,方便客戶端調用遠程功能,可同時包含多個應用,一個應用下包含多個遠程對象,遠程應用對象的目錄結構如下圖

網絡通訊部分采用完成端口模式,通訊數據采用封裝數據對象XVarArray,該對象支持基本數據類型int int64 bytes long float char *,該對象常用函數如下:

static bool AttachBytes(BYTE *pByte,int nLength,OutManyVarArray &m_OutManyVarArray);

void Copy(XVarArray &m_XVarArray);

bool RemoveElementAt(int nIndex);

int GetElementCount();

bool ReadElement(void *pElement,BYTE &nType,int &L);

bool SetOrderElementPos(int nNum);//設置到第幾個元素

bool ReadObj(void *pObj,int &L);

bool ReadBytes(BYTE *pByte,int &L);

bool ReadStr(char *pStr,int &L);

bool ReadInt64(__int64 &iZhi64);

bool ReadFloat(float &fZhi);

bool ReadInt(int &iZhi);

void SetRealPos(int nPostion);

void SetRealPosEnd();

void SetRealPosBegin();

void WriteObj(void *pObj,int L);

void WriteBytes(unsigned char *pByte,int L);

void WriteStr(char *pStr);

void WriteInt64(__int64 iZhi64);

void WriteFloat(float fZhi);

void WriteInt(int nZhi);

XVarArray & operator =(XVarArray &Var);

封裝的遠程對象基類,方便編寫遠程對象

#include "..\\include\\XNetEvent.h"

typedef map<string,XNetEvent *>XNetEventType;//對象的所有事件

class AFX_EXT_CLASS XOneObject

{

public:

void GetEvents(CStringArray &m_EventArray);

void DebugObj(char *pStr);

void *pXOneApp;

bool bDIYEvent;//自定義觸發事件

void InitPack();

virtual void RemoveSOCKET(SOCKET s);//一個SOCKET 掉線

void RemoveSEvent(SOCKET s);

HANDLE hNet;

DWORD pBasePack;//公有對象使用同一個,私有對象擁有獨立連接的

void AddOneEvent(char *sEventName);

void PostEvent(char *sEventName,XVarArray &m_XVarArray);

bool bPublic;

CString sAppName;

CString sObjName;

CStringArray m_EventNameArray;

virtual void InitObjEvent();

bool CallClientFunc(char *sFName,XVarArray &InVarArray,XVarArray &OutVarArray);

bool GetAllFuncNameArray(CStringArray &NameArray);

typedef bool (XOneObject::*pCLASSFUNC)(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

typedef map<string,pCLASSFUNC>XCLASSFUNC;

XOneObject();

virtual ~XOneObject();

virtual void InitObject();

virtual XOneObject * GetAnOtherObject();

int nTestZhi;

bool ExampFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void PushFuncName(char *sFName,pCLASSFUNC pFunc);

bool CallFunc(char *sFName,SOCKET s,XVarArray &InVarArray,XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

bool AttachOneEvent(char *sEventName,SOCKET s,char *sUserID);

protected:

XCLASSFUNC m_XCLASSFUNC;

XNetEventType m_XNetEventType;

};

派生該基類實現遠程對象如

class XShareObjectNO2:public XOneObject

{

public:

//典型的對象函數 參數s:網絡連接SOCKET ,InVarArray:輸入參數:OutVarArray:輸出參數,bClose:返會true表示斷開連接,nThreadNO:表示在服務端低幾個線程調用

bool JsonFunction(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void InitObjEvent();//初始化對象事件

bool AddStr(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

XOneObject * GetAnOtherObject();

bool MyFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void InitObject();//初始化對象基本參數

XShareObjectNO2();

virtual ~XShareObjectNO2();

};

實現類:

XShareObjectNO2::XShareObjectNO2()

{

}

XShareObjectNO2::~XShareObjectNO2()

{

}

void XShareObjectNO2::InitObject()

{MyFunc

PushFuncName("MyFunc",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::MyFunc));//初始對象函數MyFunc指向函數MyFunc

PushFuncName("AddStr",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::AddStr));//初始對象函數AddStr指向函數AddStr

PushFuncName("JsonFunction",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::JsonFunction));//初始對象函數AddStr指向函數JsonFunction

}

bool XShareObjectNO2::MyFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

int a,b;

InVarArray.ReadInt(a);

InVarArray.ReadInt(b);

int c=a*b;

OutVarArray.WriteInt(c);

OutVarArray.SetRealPosBegin();

return true;

}

XOneObject * XShareObjectNO2::GetAnOtherObject()

{

XShareObjectNO2 *pShareObjectNO2=new XShareObjectNO2();

pShareObjectNO2->InitObject();

pShareObjectNO2->InitObjEvent();

pShareObjectNO2->hNet=hNet;

return pShareObjectNO2;

}

bool XShareObjectNO2::AddStr(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

char Str1[200],Str2[200];

int L;

InVarArray.ReadStr(NULL,L);

char *pStr1=new char [L+1];

InVarArray.ReadStr(pStr1,L);

pStr1[L]=0;

InVarArray.ReadStr(NULL,L);

char *pStr2=new char [L+1];

InVarArray.ReadStr(pStr2,L);

pStr2[L]=0;

CString TStr;

TStr.Format("%s%s",pStr1,pStr2);

delete[]pStr1;

delete[]pStr2;

OutVarArray.WriteStr((char *)(const char *)TStr);

OutVarArray.SetRealPosBegin();

XVarArray m_XVarArray0;

m_XVarArray0.WriteStr("DataChange 事件觸發的消息");

PostEvent("DataChange",m_XVarArray0);//觸發DataChange事件

return true;

}

void XShareObjectNO2::InitObjEvent()

{

AddOneEvent("DataChange");//初始化對象事件DataChange

AddOneEvent("JsonEvent");//初始化對象事件JsonEvent

}

bool XShareObjectNO2::JsonFunction(SOCKET s, XVarArray &InVarArray, XVarArray &OutVarArray, bool &bClose, DWORD &dwObject, int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

int L;

InVarArray.ReadStr(NULL,L);

char *pStr=new char[L+1];

memset(pStr,0,L+1);

InVarArray.ReadStr(pStr,L);

OutVarArray.WriteStr(pStr);

PostEvent("JsonEvent",OutVarArray);

delete[]pStr;

return true;

}

對象dll裝載公有輸出函數如:

extern DWORD WINAPI GetOneObject(char *sObjectName)//獲得指定名稱的遠程對象

{

if(strcmp(sObjectName,"XShareObjectNO1")==0)

{

XShareObjectNO1 *pShareObjectNO1=new XShareObjectNO1();

pShareObjectNO1->InitObject();

pShareObjectNO1->InitObjEvent();

return (DWORD)pShareObjectNO1;

}

else

{

if(strcmp(sObjectName,"XShareObjectNO2")==0)

{

XShareObjectNO2 *pShareObjectNO2=new XShareObjectNO2();

pShareObjectNO2->InitObject();

pShareObjectNO2->InitObjEvent();

return (DWORD)pShareObjectNO2;

}

}

}

extern bool WINAPI GetModeObjectsName(CStringArray &ObjectNameArray)//獲得當前dll中包含哪些遠程對象名

{

ObjectNameArray.RemoveAll();

ObjectNameArray.Add("XShareObjectNO1");

ObjectNameArray.Add("XShareObjectNO2");

return true;

}

extern bool WINAPI GetOneObjectAllFuncName(DWORD pXOneObject,CStringArray &ObjectFunNameArray) //返回對象包含的函數名

{

XOneObject *pXOneObject0=(XOneObject *)pXOneObject;

pXOneObject0->GetAllFuncNameArray(ObjectFunNameArray);

return true;

}

為方便客戶端調用,封裝客戶端調用框架,目前支持的VC C# Java的客戶端調用

以VC客戶端為例

class AFX_EXT_CLASS XClientNetCtrl

{

public:

void CloseOneNet(char *sAppName);//關閉一個遠程應用

bool CallShareObjectFunc(XClientShareObject *pXClientShareObject,char *sFName,XVarArray &m_VarArray,XVarArray *pOutXVarArray=NULL);//調用遠程對象方法

XClientShareObject * GetOneNetShareObject(char *sAppName,char *sShareObjectName,bool bPerson=false);//獲得一個遠程對象 sAppName:應用名 sShareObjectName:對象名

bool GetOneAppNet(char *sIP,UINT nPort,char *sAppName,pRUNCLASSFUNC pExitNet=NULL,DWORD pXRunShareObjectBase=0);//獲得一個應用

XClientOneNetArray m_XClientOneNetArray;

XClientOneNetFromNameArray m_XClientOneNetFromNameArray;

XClientNetCtrl();

virtual ~XClientNetCtrl();

};

class AFX_EXT_CLASS XClientShareObject //客戶端對象的基類

{

public:

bool EventOutFunc(char *sEventName,XVarArray &OutVarArray);

void AppAdd(HANDLE hNet,char *sPAppName,DWORD pXClientOneNet);

bool OutFuncResult(char *sFName,XVarArray &m_XVarArray);

void AttachXNetFuncReult(char *sFName,DWORD pXRunShareObjectBase,pRUNCLASSFUNC pFunc);

bool ActOneFunc(char *sFName,XVarArray &m_InXVarArray,XVarArray *pOutXVarArray=NULL);//執行運行函數,如果要等待結果那么就要賦pOutXVarArray,如果不用等待只是用結果事件那么不用賦值;

char sName[150];

bool RunOutFunc(char *sEventName);

typedef map<string ,struct RunBaseST *>XRUNCLASSFUNCBASE;

XRUNCLASSFUNCBASE m_XEVENTCLASSFUNCBASE;

XRUNCLASSFUNCBASE m_XFUNCOUTFUNCBASE;

void AttachXNetEvent(char *sEventName,DWORD pXRunShareObjectBase,pRUNCLASSFUNC pFunc);

void AddListenEvent(char *sEventName);

void SetNetEventFunc(NetEvent *pNetEvent0);

NetEvent *pNetEvent;

CStringArray m_ListenNameArray;

void *pParentApp;

bool bPerson;

XClientShareObject();

virtual ~XClientShareObject();

};

客戶端調用的例子

class CNetRunDlg : public CDialog, XRunShareObjectBase

{

// Construction

public:

void OBEventResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

void OBFuncResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

void OnNetExitEvent(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

CNetRunDlg(CWnd* pParent = NULL); // standard constructor

XClientShareObject *pXShareObject1,*pXShareObject2;

XClientNetCtrl m_XClientNetCtrl;

// Dialog Data

//{{AFX_DATA(CNetRunDlg)

enum { IDD = IDD_NETRUN_DIALOG };

// NOTE: the ClassWizard will add data members here

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CNetRunDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

//{{AFX_MSG(CNetRunDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnButton1();

afx_msg void OnButton2();

afx_msg void OnButton4();

afx_msg void OnButton3();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

初始

m_XClientNetCtrl.GetOneAppNet("192.168.0.1",5242,"game",static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OnNetExitEvent),(DWORD)this);//連接服務器

pXShareObject1=m_XClientNetCtrl.GetOneNetShareObject("game","XShareObjectNO1",true);//獲得遠程對象XShareObjectNO1

pXShareObject1->AttachXNetFuncReult("NO2Func",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBFuncResult));//綁定遠程序對象XShareObjectNO1函數NO2Func返回函數

pXShareObject1->AttachXNetEvent("DataChange",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBEventResult));//綁定遠程序對象XShareObjectNO1事件函數DataChange

pXShareObject2=m_XClientNetCtrl.GetOneNetShareObject("game","XShareObjectNO2",true);//獲得遠程對象XShareObjectNO2

pXShareObject2->AttachXNetFuncReult("AddStr",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBFuncResult));//綁定遠程序對象XShareObjectNO2函數NO2Func返回函數

pXShareObject2->AttachXNetEvent("DataChange",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBEventResult));//綁定遠程序對象XShareObjectNO2事件函數DataChange

void CNetRunDlg::OnNetExitEvent(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis)

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

}

void CNetRunDlg::OBFuncResult(XClientShareObject *pXClientShareObject, char *sFuncName, XVarArray &OutXVarArray, DWORD pThis)//*sFuncName:執行的函數,OutXVarArray返回的結果

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

}

void CNetRunDlg::OBEventResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis)//*sEventName:返回的事件,OutXVarArray返回的結果

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

char TStr[100];

int L;

OutXVarArray.ReadStr(TStr,L);

TStr[L]=0;

AfxMessageBox(TStr);

}

XShareObjectNO2調用函數

XVarArray m_XVarArray,m_XOutVarArray;

m_XVarArray.WriteStr("中國");

m_XVarArray.WriteStr("北京");

pXShareObject2->ActOneFunc("AddStr",m_XVarArray,&m_XOutVarArray);

char TStr[200];

int L;

m_XOutVarArray.ReadStr(TStr,L);

TStr[L]=0;

AfxMessageBox(TStr);

TRACE("ok");

基于該遠程對象實現一個類QQ的聊天工具PCEQ,實現點對點聊天,群聊,文件傳輸,遠程協助,語音聊天,視頻聊天等常用功能

如今消息生產消費訂閱已經有不少成熟的開發包可調用,而那些年你也是否自己造了一大堆輪子呢?

以上就是關于pos機遠程刷卡步驟,VC實現遠程對象函數調用的知識,后面我們會繼續為大家整理關于pos機遠程刷卡步驟的知識,希望能夠幫助到大家!

轉發請帶上網址:http://www.www690aa.com/newsone/63936.html

你可能會喜歡:

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 babsan@163.com 舉報,一經查實,本站將立刻刪除。