📄 lsnsock.h
字号:
#pragma once
class CMsg;
class CCntSock;
//SetDiscSign return value means this function is a void function
//and if do something base on this operation should check msg.IsDiscSignal()
typedef void SetDiscSign;
typedef bool (*RcvCallBack)(CMsg* msg);
typedef void (*AcptCallBack)(CCntSock** out);
//exception happened,need to abnormal disconnect
typedef void (*DisConnBack)(UINT info);
class CMsg
{
public:
_state state;
UINT PosX;
UINT PosY;
CString str;
public:
void SerializeRev(CArchive& ar);
void SerializeSnd(CArchive& ar) const;
CMsg(){Set4None();state=stNONE;PosX=PosY=0;}
_state GetMsgState() const;
bool IsDiscSignal(bool IsBack = false) const;
void Set4None();
void Set4Pos(UINT x, UINT y,bool IsBack=false);
void Set4Chat(const CString& _str,bool IsBack=false);
void Set4Conn(bool IsBack=false);
void Set4Disc(bool IsBack=false);
void Set4Start(bool IsBack=false);
void Set4Hit(_tag hitTag,int x,int y,bool IsBack=false);
void Set4Lose(int x,int y,bool IsBack=false);
};
inline bool CMsg::IsDiscSignal(bool IsBack) const { return (IsBack)?(state==stDISCBK):(state ==stDISC); }
class CCntSock: public CSocket
{
CMsg msg;
CSocketFile* File;
CArchive* ArchiveIn;
CArchive* ArchiveOut;
protected:
virtual void OnReceive(int nErrorCode);
CCntSock(const CCntSock& rSrc); // no implementation
void operator=(const CCntSock& rSrc); // no implementation
RcvCallBack ReceiveMsgFnx;
DisConnBack DisConnectFnx;
public:
void Init();
//void Abort();
bool SendMsg(const CMsg& msg)const ;
SetDiscSign BeginConnect(LPCTSTR lpszAddress, UINT nPort=0);
void Over();
bool IsOver;
CCntSock(RcvCallBack rcbFnx,DisConnBack dcFnx);
~CCntSock(){Over();}
};
inline CCntSock::CCntSock(RcvCallBack rcbFnx,DisConnBack dcFnx){
ReceiveMsgFnx = rcbFnx;
DisConnectFnx = dcFnx;
File=0;ArchiveIn=0;ArchiveOut=0;
IsOver=false;
}
// CSvrSock 命令目标
class CSvrSock : public CSocket
{
protected:
CSvrSock(const CSvrSock& rSrc); // no implementation
void operator=(const CSvrSock& rSrc); // no implementation
virtual void OnAccept(int nErrorCode);
AcptCallBack acptFnx;
DisConnBack DisConnectFnx;
public:
SetDiscSign BeginListen(UINT port=0);
void Over(){IsOver=true;};
bool IsOver;
CSvrSock(AcptCallBack acbFnx,DisConnBack dcFnx);
~CSvrSock(){Over();}
};
inline CSvrSock::CSvrSock(AcptCallBack acbFnx,DisConnBack dcFnx){
acptFnx = acbFnx;
DisConnectFnx= dcFnx;
IsOver=false;
}
inline _state CMsg::GetMsgState() const{
return state;
}
inline void CMsg::Set4None(){
state=stNONE;
PosX=PosY=0;
str.Empty();
}
inline void CMsg::Set4Pos(UINT x, UINT y,bool IsBack){
state=IsBack?stPOSBK:stPOS;
ASSERT(x>0 && y>0);
PosX=x;PosY=y;
str.Empty();
}
inline void CMsg::Set4Chat(const CString& _str,bool IsBack){
state=IsBack?stCHATBK:stCHAT;
PosX=PosY=0;
str=_str;
}
inline void CMsg::Set4Conn(bool IsBack){
state=IsBack?stCONNBK:stCONN;
PosX=1;PosY=0;//version number
str=L"\nHELLO";
}
inline void CMsg::Set4Disc(bool IsBack){
state=IsBack?stDISCBK:stDISC;
PosX=PosY=0;
str=L"\nBYE";
}
inline void CMsg::Set4Start(bool IsBack){
state=IsBack?stSTARTBK:stSTART;
PosX=PosY=0;
str=L"\nSTART";
}
inline void CMsg::Set4Hit(_tag hitTag,int x,int y,bool IsBack){
state=IsBack?stHITBK:stHIT;
PosX=(int)hitTag;
PosY=(int)(x<<16)|y;
str=L"\nHIT";
}
inline void CMsg::Set4Lose(int x,int y,bool IsBack){
state=IsBack?stLOSEBK:stLOSE;
PosX=x;PosY=y;
str=L"\nLOSE";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -