📄 chatdll.cpp
字号:
//---------------------------------------------------------------------------
//模块名称: TT ChatServer 扩展 DLL 部分
//程序设计: 天云上人
#include "ChatDLL.h"
//---------------------------------------------------------------------------
//功能描述:生成对话格式
//参数说明:Color 颜色
// Action 动作
// Addressor 发言人
// Face 表情
// Listerner 接收者
// Body 内容
// Pic 贴图
// Icon 头像
//返 回 值:生成聊天室使用的脚本内容
CString MakeSay(CString Color, CString Action, CString Addressor, CString Face, CString Listener, CString Body, CString Pic, CString Icon){
return "<script>parent.ShowSay('" + Color + "','" + Action + "','" + Addressor + "','" + Face + "','" + Listener + "','" + Body + "','" + Time(false) + "','" + Pic + "','" + Icon + "')</script>\r\n";
}
//---------------------------------------------------------------------------
//功能描述:返回当前的时间
//设计时间: 2002-11-14
//参数说明:ShowDate 是否带日期格式
//返 回 值:返回字符串日期内容
CString Time(bool ShowDate){
CTime T;
T = CTime::GetCurrentTime();
if(ShowDate)
return T.Format("%Y-%m-%d %H:%M:%S");
else
return T.Format("%H:%M:%S");
}
//---------------------------------------------------------------------------
//功能描述: 读入文本文件//Add:2002-12-11
//参数说明: strFileName 要读的文件名, strBody 为读入的内容
void ReadFromFile(CString strFileName, CString &strBody){
FILE *fp;
char str[1025];
strBody = "";
if((fp = fopen(strFileName, "r")) != NULL){
while(!feof(fp)){
fgets(str, 1024, fp);
strBody = strBody + str;
}
}
fclose(fp);
}
//---------------------------------------------------------------------------
//功能描述: 取得用户的位置
int GetID(CString &strFindName, ChatUserInfoTag UserInfo[], int nMaxUser)
{
int nPos;
for(nPos = 0; nPos < nMaxUser; nPos++)
if(UserInfo[nPos].strUserName == strFindName)
break;
return nPos;
}
//---------------------------------------------------------------------------
//取得表格头部
CString Table(){
return "<TABLE cellSpacing=0 cellPadding=2 width=90% border=1>";
}
//---------------------------------------------------------------------------
//取得HTML行定义一
CString TR1(){
return "<TR bgcolor=#CCCCFF>";
}
//---------------------------------------------------------------------------
//取得HTML行定义二
CString TR2(){
return "<TR bgcolor=#f7f7f7>";
}
//---------------------------------------------------------------------------
//功能描述:十六进制转换十进制//Add:2002-11-13
int hextoi(char inChar){
int result;
char charToCompare=inChar;
if(isdigit(inChar))
result=inChar-'0';
else{
charToCompare=tolower(inChar);
if(charToCompare>='a' && charToCompare<='f')
result=charToCompare-'a'+10;
}
return result;
}
//---------------------------------------------------------------------------
//功能描述:对字符串进行Decode过滤//Add:2002-11-13
CString Decode(CString Input){
int n, len;
char c;
CString V;
n = 0;
len = Input.GetLength();
while(n < len){
if(Input[n]=='+')
c = ' ';
else if(Input[n]=='%' && n + 2 < len){
c = (char)(hextoi(Input[n + 1]) * 16 + hextoi(Input[n + 2]));
n += 2;
}else
c = Input[n];
if(c == '\'')
V = V + "`";
else if(c == '\\')
V = V + "/";
else if(c == '<')
V = V + "<";
else
V = V + c;
n++;
}
return V;
}
//---------------------------------------------------------------------------
//功能描述:取Cookie中的字段值
CString GetCookie(CString s, CString d){
int f, l, j;
d = " " + d + "=";
l = d.GetLength();
j = s.GetLength();
f = s.Find(d);
if(f > -1){
s = s.Mid(f + l);
f = s.Find(";");
s = s.Mid(0, f);
}else
s = "";
return s;
}
//---------------------------------------------------------------------------
//功能描述:取Get,Post中的字段值
CString GetValue(CString s, CString d)
{
int f, l, j;
d = "&" + d + "=";
l = d.GetLength();
j = s.GetLength();
f = s.Find(d);
if(f > -1){
s = s.Mid(f + l);
f = s.Find("&");
s = s.Mid(0, f);
}
else
s = "";
return s;
}
//---------------------------------------------------------------------------
//功能描述:取普通INI的字符值//Add:2002-11-16
//参数说明:strIniFile INI文件名
// strApp 为INI项目的区块名
// strKey 为INI项目名
// strDef 为INI项目的默认值
//返 回 值:INI项目的内容
CString GetINIKeyValue(CString strIniFile, CString strApp, CString strKey, CString strDef){
char p[MAX_PATH + 1];
CString strDir;
GetCurrentDirectory(MAX_PATH + 1, p); //取调用者程序目录
strDir.Format("%s\\%s", p, strIniFile);
GetPrivateProfileString(strApp, strKey, strDef, p, MAX_PATH + 1, strDir);
return p;
}
//---------------------------------------------------------------------------
//功能描述:取普通INI的数值值//Add:2002-11-16
//参数说明:strIniFile INI文件名
// strApp 为INI项目的区块名
// strKey 为INI项目名
// nDef 为INI项目的默认值
//返 回 值:INI项目的内容
int GetINIKeyValue(CString strIniFile, CString strApp, CString strKey, int nDef){
char p[MAX_PATH + 1];
CString strDir;
GetCurrentDirectory(MAX_PATH + 1, p); //取调用者程序目录
strDir.Format("%s\\%s", p, strIniFile);
return GetPrivateProfileInt(strApp, strKey, nDef, strDir);
}
//---------------------------------------------------------------------------
//功能说明:发HTML特效
//参数说明:nID ID号
// strName 名字
// strB 特效编号
// strC 特效内容
// strD 发送对象
// *nSendType 发送类型
// nLevel 等级
//返 回 值: 返回生成好的聊天室脚本
CString Effect(unsigned long nID, CString strName, CString strB, CString strC, CString strD, int *nSendType, int nLevel){
CString strResult, strKey, strHTML, strCmd;
int iLevel, iCredit;
CDBVariant NV;
CDatabase db;
CRecordset rs(&db);
try{
if(db.OpenEx( strDatabase )){
strCmd.Format("select * from basic_tbl where uin=%lu", nID);
rs.Open(AFX_DB_USE_DEFAULT_TYPE, strCmd);
if(!rs.IsEOF()){
//特效的名称
strKey = "Effect_" + strB + "_Name";
strHTML = GetINIKeyValue("Effect.ini", "Effect", strKey, "");
if(strHTML != ""){
//特效的内容
strKey = "Effect_" + strB + "_Format";
strHTML = GetINIKeyValue("Effect.ini", "Effect", strKey, ""); //内容
if(strHTML == "")
strResult = MakeSay("red", "提示", strName, "", "", "该特效未定义,无法使用。", "", "");
else{
//用特效的等级
strKey = "Effect_" + strB + "_Level";
iLevel = GetINIKeyValue("Effect.ini", "Effect", strKey, 100); //需要的修行
if(nLevel >= iLevel){
//用特效的积分
strKey = "Effect_" + strB + "_Credit";
iCredit = GetINIKeyValue("Effect.ini", "Effect", strKey, 100); //需要的银两
// if(N6 >= iCredit){
//发送的类型
strKey = "Effect_" + strB + "_Public";
*nSendType = GetINIKeyValue("Effect.ini", "Effect", strKey, 1); //发送方向
//暂时不扣积分
// if(iCredit > 0){
// strCmd.Format("update basic_tbl set jifen=jifen-%d where uin=%lu", iCredit, nID);
// db.ExecuteSQL(strCmd);
// }
strHTML.Replace("<!--$OBJECT-->", strC);
if(strD == "")
strD = "大家";
else if(strD == strName)
strD = "自己";
strResult = MakeSay("red", "", strName, "对", strD, strHTML, "", "");
// }else
// r = MakeSay("red", "提示", Name, "", "", "你的银两不够。", "", "");
}else
strResult = MakeSay("red", "提示", strName, "", "", "你的等级不够。", "", "");
}
}else
strResult = MakeSay("red", "提示", strName, "", "", "该特效不存在。", "", "");
}else
strResult = MakeSay("red", "提示", strName, "", "", "你可能未正常登录。", "", "");
rs.Close();
}else
strResult = MakeSay("red", "提示", strName, "", "", "连接数据库出错。", "", "");
db.Close();
}catch(...){
if(rs.IsOpen())
rs.Close();
if(db.IsOpen())
db.Close();
strResult = MakeSay("red", "错误", strName, "", "", "调用HTML特效程序时出错。", "", "");
}
return strResult;
}
//---------------------------------------------------------------------------
//功能描述:初始化用户信息
//参数说明:nPos 为当前用户的位置
// UserInfo[] 为聊天室所有人员的数据
void InitUser(int nPos, ChatUserInfoTag *UserInfo)
{
UserInfo[nPos].bHidden = false;
UserInfo[nPos].bSendLoginMsg = false;
UserInfo[nPos].bShowIcon = false;
UserInfo[nPos].Socket = NULL;
UserInfo[nPos].nID = 0;
UserInfo[nPos].nCredit = 0;
UserInfo[nPos].nLevel = 0;
UserInfo[nPos].nSex = 0;
UserInfo[nPos].nIcon = 0;
UserInfo[nPos].nSays = 0;
UserInfo[nPos].nLoginTime = 0;
UserInfo[nPos].nEndTime = 0;
UserInfo[nPos].strIP[0] = 0;
UserInfo[nPos].strPasswd[0] = 0;
UserInfo[nPos].strUserName[0] = 0;
UserInfo[nPos].strState[0] = 0;
UserInfo[nPos].strFrom[0] = 0;
UserInfo[nPos].strRnd[0] = 0;
UserInfo[nPos].strNick[0] = 0;
UserInfo[nPos].bUser1 = false;
UserInfo[nPos].nUser1 = 0;
UserInfo[nPos].strUser1[0] = 0;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -