📄 appserverdlg.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 + -