⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appserverdlg.h

📁 用过恒迅达交换机的人都知道。恒迅达交换机是需要在交换机内部运行中间程序来给脚本提供数据接口并且监控机器运行状态的。本程序即是完成以上功能!用C++开发、调用了数据库(sqlserver2000)存储过
💻 H
字号:
// AppServerDlg.h : header file
//

#if !defined(AFX_APPSERVERDLG_H__B19A6134_6670_4666_947B_F24D26FF12FD__INCLUDED_)
#define AFX_APPSERVERDLG_H__B19A6134_6670_4666_947B_F24D26FF12FD__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "HXDMessage.h"
#include "WaitQueue.h"


class CFunSocket;
class CListenFunSocket;
class CListenSocket;
class CSeatSocket;
class CHXDSocket;

const INT MAX_SEAT_SUPPORTED = 256;		//支持的最大座席数量
const INT WAIT_CONNECT_SECONDS = 5;		//网络中断重新连接的间隔时间(秒)
const INT INBUFFER_SIZE = 22528;		//接收缓冲容量
const INT MAX_INBUFFER_CACHE = 20480;	//接收缓冲门限
const INT MAX_MESSAGE_SIZE = 2048;		//单个数据包最大长度

//座席状态值
enum
{
	SEAT_DISABLE = 0,	//座席未登录
	SEAT_IDLE,			//座席空闲
	SEAT_RING,			//座席正在振铃
	SEAT_CONNECT,		//座席正在通话
	SEAT_DIAL,			//座席正在呼出
	SEAT_OFFHOOK		//座席摘机
};

//座席状态结构
struct SEATSTATE
{
	INT nSeatID;			//座席分机号
	INT nSocketID;			//座席对应的通信端口号序号
	INT nListIndex;			//座席在列表框中的序号(未用)
	INT nState;				//座席状态(取值以上的枚举值)
	INT nMeetingID;			//座席参加的会议号
	CString sOperatorID;	//座席工号
	CString sCalledID;		//座席被叫号码
	CString sCallerID;		//座席主叫号码
};

struct Auto
{
	SHORT m_sStartAgentChannel;
	SHORT m_sEndAgentChannel;
	SHORT m_sLoginID[6];
};

///diaohan
#define RFCHEADLEN	44
#define MAX_RFCBUFSIZE 2048
#define	RFC_HXDID		0x00647868	 /*hxd*/
#define MAX_FUNREQ_SUPPORTED 512
#define	RFC_DATA		0x01		 //数据包
#define RFC_INVALIDRET	0x02		 //无效的反回值
#define	RFC_TIMEOUT		0x03		 //超时

typedef struct _PARAM//参数结构
{
	USHORT	usParamValueLen;	//参数长度
	CHAR	szParam[2];			//参数内容, 长度由 usParamValueLen 标示, 与流程中定义的变量长度相同
}PARAM, *PPARAM;

//此结构后跟参数项
typedef struct _HXDRFCHD  //remote function call
{
	ULONG		lHdSize;		//此结构长度, 亦即参数的偏移位置(offset),
								//接收端(服务端)请以此字段值定位参数表,且不要更改此值

	ULONG		lTotalSize;		//数据总长度,包括此字段
	ULONG		hxdID;			//设为"hxd"
	USHORT		sChannel;		//通道号
	SHORT		sStateRet;		//服务端处理后的返回值( 值>10000有效 ); 客户端用此域表示所发送的数据的类型
	USHORT		usFid;			//函数号,与流程生成器中定义的函数号对应
	CHAR		szFName[20];	//函数名
	SHORT		sParamCount;	//参数个数;
	LONG		nReserved1;		//保留
}HXDRFCHD, *PHXDRFCHD;

////

///
#include "ftab.h"
//#include "XPtool/listboxxp.h"
#include "TrayNot.h"

/////////////////////////////////////////////////////////////////////////////
// CAppServerDlg dialog
#include "TrayDialog.h"
#include "DialogHeader.h"	//For dialog header ctrl

class CAppServerDlg : public CDialog
{
protected:
	INT m_nCallBeginChannel;
	INT m_nCallEndChannel;
	INT m_bSpecChan;
	CMap <INT, INT&, WAITTABLE *, WAITTABLE *> m_mapWaitTable;
	CWaitQueue m_wqWaitCall;

#define PAUSETIMEOUT			500
#define MAX_AUTO_NUM           10
public:
	CStdioFile m_RecvSeatFile;
	CStdioFile m_RecvHXDFile;
	CStdioFile m_SendSeatFile;
	CStdioFile m_SendHXDFile;
	CString    m_sCallerId;
	CString    m_sCalledId;
	CCriticalSection m_csReceQueue;

	CTrayNot*	m_pTray;
	BOOL  m_bHidden;



// Construction
	struct MEETSTATUS
	{
		short id;
		short peples;
		short upper;
		short openmark;
		char  file[100];
	};


	//CString strChatRoom[]
public:
	void SendCallOutNew(CString scaller,CString scalled,CString sPath);
	void TimeSendOut();
	short GetListenVoc(short *ipos,short operid,short type,char* fpath); 
	short GetListenVocAndName(short *ipos,short operid,short type,short mode,char* name,char *fpath);
	short GetBMFilename(short pos , char * strTel , char * fpath);
	//南京恒讯达 wq 2005-08-17增加
	short GetListenVocByMode(short *ipos,short operid,short type,short mode,char* fpath); 
	short GetVocByMkeeptype(short *ipos,short operid,short type,short mode,char* caller,char* fpath); 
	short GetUserBM(CString *telnum,short * operid,char* fpath);
	short CheckAward(short gs,short *jl,char *file);
	short GetEQTestQuestion(short *pos,short *answer,char *filename);
	short GetAQAnswer(char* title,int pos,char *resault);
	short GetAQTestQuestion(short *pos,char *filename);
	short GetStory(int ikey,short *pos,char *file);
	short CheckCallInType(CString tel,char *sp,char *utel);
	void PlayText(CString smsTxt);
	short CastSelectMusic(CString caller,CString callerd,CString filepath,
							CString namepath,CString strTime,short oper,short type=1);
	short GetSelectListMusic(int it1,int it2,char * song,char *songname);
//	short CetTimeSongOut(short *xh,CString *filepath,CString *namepath);
	short GetTimeSongOut(short * xh,char * filename, char * file);

	
	short Partnership(char * caller,char *strTel,short *seatId);
	short DeleteLeaveWord(CString strID,CString strFile,int oper);
	short GetCalledTel(CString strID,char *strTel);
	short SendCommRecord(char *sCaller,char *sCallered,int iOper,char *scallintime);
	void InitDatabase();
	short SetUserInfo(CString strID,int oper,int type,char *ikey);
	//南京恒讯达 wq 2005-08-16增加
	short SetTimeOutFlag(short xh, short flag);
	short AddUserInfo(char* telnumber,int operid,char *path,int sex);
	short GetQuestionResult(short pos,short key,char *path);
	short SetUserBM(char * strTel, short operid, short xh);
	short SetUserBMByFile(char * strTel, short operid, char *strFile);
	short CheckCallee(char *calleed);


	
	short GetSelectMusic(CString strKey,int type,short * pos,char *filename,char *namepath);
	short CheckUserKT(CString strID,int iOper);
	short CheckCallOut(CString strTel);
	short CheckCallIn(char* caller,char * callee);
	short Charge(char* caller,short * iOper);
	short OperRegType(short* operid);
	short GetCustomBackMusic(int ikind,int type,int *index,char *filename);
	short SetUserBackVoc(CString strID,int ikey,CString filename);
	short RefreshBackVoc(CString strID,int ikey,CString filename,int itype);
	short GetSelectVocFile(CString strID,int ikey,char *filename);
	short CheckBlacklist(CString * strTel,int sec/*strID,int oper,int type,short *index,char *number */);
	
	
	CString GetUserInfo(CString strTel);
	short LogoutOper(CString strID,int operid,int type);
	short SendMTMsg(CString strR,CString strC,int oper,int type,int spMark=1);
	short SetUserCallOut(CString strID,int oper,int type);
	short SetUserKT(CString strID,CString start,CString end,int oper);
	short SetRecordMsgType(CString strID,int ikey,int operid);
	short GetRecordMsgNum(CString strID,int oper,int operpos,char *filename,short *gs,long *pos ,int type );
	short SendLeaveMsg(CString strTel,CString strService,CString phone);
	short GetRecordMsgType(CString strID,CString strFile,CString strTel,short oper);
	short GetRecordVocFileName(char *strID,char *file);
	short CheckTelType(char *Telnumber,char * callerdID,char *callerID,int iType);
	short SaveBlackList(char *strID,short * iOper,char *number,short *iType);
	BOOL GetCHUserInfo(CString strID,char* strTel,char* strFile );
	int RegisterUser(CString strTel, int oper, int type,char *sID);
	short IfRegisterUser(char* strTel,short *opID,char* strID);

	void UpdateChatRoomPeple(int ik,int gs,CString strID,int mark);
	BOOL GetChatRoomNum(int ik,MEETSTATUS *ms);
	BOOL GetChatRoomStatus(int id,MEETSTATUS *ms);
	void AddListMessage(int ibz,CString str);
	CString GetFormatTime();
	void InitFunSocket();
	BOOL show_data( int nLen, HXDRFCHD *pData);		////解释外部调函
	BOOL OnAcceptReq(CListenFunSocket *pSocket);
	void OnCloseReqSocket(int iID);
	void OnReceiveReq(CFunSocket * pSocket);
	void AnalysisMessage();
	void LogInAllChannel();
	struct Auto m_AutoArray[MAX_AUTO_NUM];
	BOOL  m_bAutoAnswer;
	SHORT m_sAutoNum;
	BOOL GetCallOutState();
	void SetCallOut(BOOL bCallOut = TRUE);
	void SendCallOut(LPCTSTR sCallerId, LPCTSTR sCalledId, INT nChannel = -1);
	void ResetSeat(INT nSeatID);
	void LogoffSeat(SEATSTATE *pSeatState);
	void LogoffAllSeat();
	BOOL UpdateSeatItem(SEATSTATE *pSeatState);
	BOOL DeleteSeatItem(INT nSeatID);
	INT FindSeatItem(INT nSeatID);
	SEATSTATE * AddSeat(INT nSocketID);
	SEATSTATE * GetSeat(INT nID, BOOL bSocketID = TRUE);
	BOOL AnalysisSeatMessage(INT nSocketID);
	BOOL AnalysisHXDServerMessage();
	BOOL SendToHXDServer(HXDMESSAGE *pMsg);
	BOOL SendToSeat(HXDMESSAGE *pMsg, INT nSocketID);
	BOOL ConnectToHXDServer();
	void OnAcceptFromSeat(CListenSocket *pSocket);
	void OnReceiveFromHXDServer(CHXDSocket *pSocket);
	void OnReceiveFromSeat(CSeatSocket *pSocket);
	void OnConnectToHXDServer(CHXDSocket *pSocket);
	CAppServerDlg(CWnd* pParent = NULL);	// standard constructor
//	static bool WINAPI  ProcessCheckCallOut();

// Dialog Data
	//{{AFX_DATA(CAppServerDlg)
	enum { IDD = IDD_APPSERVER_DIALOG };
	CListBox	m_list4;
	CListBox	m_list3;
	CListBox	m_list2;
	CListCtrl	m_lstSeat;
	CString	m_sSeatReceive;
	CString	m_sSeatSend;
	CString	m_sServerReceive;
	CString	m_sServerSend;
	BOOL	m_bRecvFromSeat;
	BOOL	m_bSendToHXD;
	BOOL	m_bSendToSeat;
	BOOL	m_bRecvFromHXD;
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAppServerDlg)
	public:
	virtual void WinHelp(DWORD dwData, UINT nCmd = HELP_CONTEXT);
	virtual BOOL DestroyWindow();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	virtual void PostNcDestroy();
	//}}AFX_VIRTUAL

// Implementation
protected:
	INT m_nTestCallSent;
	INT m_nTestCallDialed;
	INT m_nTestCallCanceled;
	BOOL m_bCallOut;

	CFolderTabCtrl m_wndFolderTab;		 // the folder tab control
	int iPosition;
	CDialogHeader m_HeaderCtrl;
	CBrush br;

	INT m_nWaitConnect;				//等待重新连接的计时器
	CListenSocket *m_pListenSocket;	//针听座席连接的Socket
	CSeatSocket *m_pSeatSocket[MAX_SEAT_SUPPORTED];	//与座席通信的Socket
	SEATSTATE m_SeatState[MAX_SEAT_SUPPORTED];	//座席状态结构
	INT m_nSeatCount;				//座席数量
	CHXDSocket *m_pHXDSocket;		//与HXD服务器通信的Socket
	CListenFunSocket *m_pHXDFunSocket;	//针听外部调函的Socket
	CFunSocket * m_pFunSocket[MAX_FUNREQ_SUPPORTED];
	HXDRFCHD m_HxdRfcHd[MAX_FUNREQ_SUPPORTED];
	CHAR * m_HxdRfcBuf[MAX_FUNREQ_SUPPORTED];

	INT m_nSeatReceive;				//从座席接收数据包数
	INT m_nSeatSend;				//向座席发送数据包数
	INT m_nServerReceive;			//从HXD服务器接收数据包数
	INT m_nServerSend;				//向HXD服务器发送数据包数
	HICON m_hIconConnect;
	HICON m_hIconLose;
	HICON m_hIcon;

	CHAR m_sHXDServerInBuffer[INBUFFER_SIZE];	//接收HXD服务器缓冲
	INT m_nHXDServerInReadPtr;		//接收HXD服务器缓冲读指针
	INT m_nHXDServerInWritePtr;		//接收HXD服务器缓冲写指针

	CHAR *m_sSeatInBuffer[MAX_SEAT_SUPPORTED];	//接收座席缓冲
	INT m_nSeatInReadPtr[MAX_SEAT_SUPPORTED];	//接收座席缓冲读指针
	INT m_nSeatInWritePtr[MAX_SEAT_SUPPORTED];	//接收座席缓冲写指针

	// Generated message map functions
	//{{AFX_MSG(CAppServerDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	virtual void OnOK();
	virtual void OnCancel();
	afx_msg void OnConnect();
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnRecvseatCheck();
	afx_msg void OnSendseatCheck();
	afx_msg void OnRecvhxdCheck();
	afx_msg void OnSendhxdCheck();
	afx_msg void OnAutoCallout();
	afx_msg void OnHandCallout();
	afx_msg void OnSize(UINT nType, int cx, int cy);
	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
	afx_msg void OnClearlist();
	afx_msg void OnReadparam();
	afx_msg void OnTest();
	afx_msg void OnDestroy();
	//}}AFX_MSG
	afx_msg LONG OnCloseSocket(WPARAM wParam, LPARAM lParam);
	afx_msg void OnChangedTab(NMFOLDERTAB* nmtab, LRESULT* pRes);

	afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);  
	afx_msg BOOL OnQueryEndSession();  //Windows关闭消息处理函数

	DECLARE_MESSAGE_MAP()
};

enum
{
	HXDSOCKET_TYPE_ID = 1,	//Socket类型:同HXD服务器通信
	SEATSOCKET_TYPE_ID = 2	//Socket类型:同座席通信
};

enum
{
	WM_CLOSESOCKET = WM_USER + 1,
	WM_RECEIVEMESSAGE = WM_USER + 2,
};

template <> void AFXAPI DestructElements<WAITTABLE *> (WAITTABLE **ppWaitTable, int nCount);

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_APPSERVERDLG_H__B19A6134_6670_4666_947B_F24D26FF12FD__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -