#include<头文件省略> ——核心begin class CSocket32;//CSocket32 &m_socka实现套接字的引用 class CLogin { public: CLogin(CSocket32& socka);//引用必须初始化 virtual ~CLogin(); inline string &GetUser() {return m_szUser;}//获取 用户名 inline string &GetPath() {return m_szPath;}//获取 可访问目录 inline BOOL IsLoged(){return m_bLogin;}//获取登陆状态 BOOL Login(LPCSTR sKey,string& str);//登陆操作
private: BOOL USER(string &str);//核对--用户名 BOOL PASS(string &str); //核对--密码 private: BOOL m_bLogin; //登陆状态 string m_szUser;//用户名 string m_szPass;//密码 string m_szPath;//可访问的目录 CSocket32 &m_socka;//套接字引用 }; ——核心end
实现部分
——核心begin //异常类 class CError { const char* m_pError; public: CError(const char* p) { m_pError = p; } const char* what(){return m_pError;}
}; //构造初始 CLogin::CLogin(CSocket32& socka):m_socka(socka),m_bLogin(FALSE) { //socka的初始化。*必须* }
CLogin::~CLogin() {
} /**//*************************************************************/ //1. 登陆操作 BOOL CLogin::Login(LPCSTR sKey,string &str) { if(m_bLogin)return TRUE; try { if(!strcmp(sKey,"USER"))//用户名正确 if(USER(str))return TRUE; if(!strcmp(sKey,"PASS"))//密码正确 if(PASS(str))return TRUE; }catch(CError &e)//异常返回 { str = "530 Login incorrect for " + string(e.what()) + "." + CRLF; m_socka.Send(str.c_str(),str.length()); } return FALSE; }
//2. 核对用户名 key=user BOOL CLogin::USER(string &str) { char s[256]; strcpy(s,str.c_str()); strupr(s); if(!theApp.m_map.count(s))//搜索S在map的个数 { throw CError("username"); } m_szUser = s; str = "331 Password required for "+str+"." + CRLF; m_socka.Send(str.c_str(),str.length());//用户名无误,返回索取密码消息 return TRUE;
}
//3. 核对密码 value.pass BOOL CLogin::PASS(string &str) { if(theApp.m_map[m_szUser].szPass != str) { throw CError("password"); } m_bLogin = TRUE; m_szPass = str; m_szPath = theApp.m_map[m_szUser].szPath;//密码无误,获取可访目录 str = "230 User "+m_szUser +" logged in , proceed." +CRLF; m_socka.Send(str.c_str(),str.length());
return TRUE; } ——核心end
|