--- innwebd/base.cpp 2004/07/04 08:04:08 1.5 +++ innwebd/base.cpp 2005/02/08 05:53:27 1.12 @@ -36,7 +36,7 @@ base::~base(void) delete (this->GetThreadPool()); } -int base::s_exec(const char* in_str, CString& out_str, const char* end_str) +int base::s_exec(const char* in_str, CString& out_str, char end_str[]) { try{ if (in_str != NULL) @@ -105,9 +105,9 @@ int base::bbs_post(const CString& head, bool head_find; CString head_name,head_value,path,from,subject,newsgroups,organization,date,msg_id; //Head DateTimeConvert sub_dt; - CString ptitle,nickname,dt_str,content,msg_content,sql; + CString ptitle,username,nickname,dt_str,content,msg_content,sql; int length; - long id,aid,cid,rid; + long id,aid,cid; try { @@ -197,8 +197,8 @@ int base::bbs_post(const CString& head, if (subject.GetLength() > 80) subject = subject.Left(75) + " ……"; - //Get nickname - nickname = "cn.bbs"; + //Get username + username = "cn.bbs."; for (int i=0;i 12) + username = username.Left(12) + "."; + + //Get nickname + nickname = "cn.bbs"; + for (int i=0;i 20) - nickname = nickname.Left(19) + "."; + nickname = nickname.Left(20); //Reference /bbs/add_sub.php @@ -223,11 +242,11 @@ int base::bbs_post(const CString& head, this->Db.ExecuteSQL(sql); cid = this->last_insert_id(); - sql.Format("insert into bbs(SID,TID,UID,nickname,title,CID,sub_dt," + sql.Format("insert into bbs(SID,TID,UID,username,nickname,title,CID,sub_dt," "sub_ip,last_reply_dt,icon,length,transship)" - "values(%d,%ld,%ld,'%s','%s',%ld,adddate('%s',interval '8' hour)," + "values(%d,%ld,%ld,'%s','%s','%s',%ld,adddate('%s',interval '8' hour)," "'%s',adddate('%s',interval '8' hour),1,%d,1)", - sid,id,this->innd_uid,addslashes(nickname),addslashes(subject), + sid,id,this->innd_uid,addslashes(username),addslashes(nickname),addslashes(subject), cid,dt_str,this->hostaddr,dt_str,length); this->Db.ExecuteSQL(sql); aid = this->last_insert_id(); @@ -236,8 +255,8 @@ int base::bbs_post(const CString& head, this->Db.ExecuteSQL(sql); //7671 //Add logfile - sql.Format("insert delayed into bbs_article_op(AID,UID,type,op_dt,op_ip,complete)" - " values(%ld,%ld,'I',now(),'%s',1)", + sql.Format("insert delayed into bbs_article_op(AID,UID,type,op_dt,op_ip)" + " values(%ld,%ld,'I',now(),'%s')", aid,this->innd_uid,this->hostaddr); this->Db.ExecuteSQL(sql); @@ -246,49 +265,33 @@ int base::bbs_post(const CString& head, { sql.Format("update bbs set cached=0, reply_count=reply_count+1," "last_reply_dt=adddate('%s',interval '8' hour),last_reply_UID=%ld," - "last_reply_nickname='%s' where aid=%ld", - dt_str,this->innd_uid,nickname,id); + "last_reply_username='%s',last_reply_nickname='%s' where aid=%ld", + dt_str,this->innd_uid,username,nickname,id); this->Db.ExecuteSQL(sql); } //Notify the author of the artile which is replyed. if (id != 0) { - sql.Format("select user_pubinfo.UID,user_pubinfo.nickname," - "user_pubinfo.email from bbs left join user_pubinfo on" - " bbs.UID=user_pubinfo.UID where AID=%ld and reply_note", - id); + sql.Format("select distinct UID from bbs where (AID=%ld or TID=%ld)" + " and visible and reply_note and UID<>%ld",id,id,this->innd_uid); RS.Open(CRecordset::snapshot,sql,CRecordset::forwardOnly | CRecordset::readOnly); - if (!RS.IsEOF()) + while (!RS.IsEOF()) { - RS.GetFieldValue("UID",dbVar),SQL_C_SLONG; - if (dbVar.m_lVal != innd_uid) - { - sql.Format("update user_pubinfo set exp=exp+1 where UID=%ld", - dbVar.m_lVal); - this->Db.ExecuteSQL(sql); - - RS.GetFieldValue("email",dbVar,SQL_C_CHAR); - sql.Format("insert into bbs_recommend(UID,TID,type,dt,email,ip)" - " values(%ld,%ld,'D',now(),'%s','%s')", - this->innd_uid,aid,dbVar.m_pstring,this->hostaddr); - this->Db.ExecuteSQL(sql); - rid = this->last_insert_id(); - - //Send notification message - - msg_content.Format("[hi]SYS_R_Reply_Article[/hide]" - "有人回复了您所发表的文章,快来[url recommend_view.php?id=%ld" - "]看看[/url]《%s》吧!\n",rid,addslashes(subject)); - - RS.GetFieldValue("UID",dbVar,SQL_C_SLONG); - sql.Format("insert into bbs_msg(fromUID,toUID,ntent,send_dt,send_ip)" - " valulues(%ld,%ld,'%s',now(),'%s')", - this->innd_uid,dbVar.m_lVal,addslashes(msg_content),this->hostaddr); - this->Db.ExecuteSQL(sql); - } - } + //Send notication message + + msg_content.Format("[hide]SYS_R_Reply_Article[/hide]" + "有人回复了您所发表的文章,快来[article %ld#%ld" + "]看看[/article]《%s》吧!\n",id,aid,addslashes(subject)); + + RS.GetFieldValue("UID",dbVar,SQL_C_SLONG); + + sql.Format("insert into bbs_msg(fromUID,toUID,content,send_dt,send_ip)" + " values(%ld,%ld,'%s',now(),'%s')", + this->innd_uid,dbVar.m_lVal,addslashes(msg_content),this->hostaddr); + this->Db.ExecuteSQL(sql); + } RS.Close(); } @@ -304,8 +307,8 @@ int base::bbs_post(const CString& head, } catch(CException* e) { - char strErrMsg[256]; - e->GetErrorMessage(strErrMsg,256); + char strErrMsg[1024]; + e->GetErrorMessage(strErrMsg,1024); syslog << logfile::log_head << "Error in bbs_post() [" << strErrMsg << "]" << endl; e->Delete(); return -1; @@ -379,8 +382,8 @@ int base::bbs_delete(long id) this->Db.ExecuteSQL(sql); //Add logfile - sql.Format("insert delayed into bbs_article_op(AID,UID,type,op_dt," - "op_ip,complete) values(%ld,%ld,'C',now(),'%s',1)", + sql.Format("insert delayed into bbs_article_op(AID,UID,type,op_dt,op_ip)" + " values(%ld,%ld,'C',now(),'%s')", id,innd_uid,this->hostaddr); this->Db.ExecuteSQL(sql); @@ -398,8 +401,8 @@ int base::bbs_delete(long id) } catch(CException* e) { - char strErrMsg[256]; - e->GetErrorMessage(strErrMsg,256); + char strErrMsg[1024]; + e->GetErrorMessage(strErrMsg,1024); syslog << logfile::log_head << "Getting article error in bbs_delete() [" << strErrMsg << "]" << endl; e->Delete(); return -1; @@ -430,7 +433,7 @@ int base::s_send(const char* in_str, boo return 0; } -int base::s_receive(CString& out_str, const char* end_str) +int base::s_receive(CString& out_str, char end_str[]) { char buf_str[2048]; int buf_read,total_read; @@ -449,6 +452,12 @@ int base::s_receive(CString& out_str, co out_str += buf_str; if (out_str.Right((int)strlen(end_str)) == end_str) break; + //different line-end symbol in different OS + if (strcmp(end_str,"\r") == 0) + { + if (out_str.Right(2) == "\r\n") + break; + } } } catch(CException* e) @@ -463,14 +472,16 @@ int base::s_receive(CString& out_str, co int base::begin(void) { + HANDLE hThread; ULONG ulThreadId; unsigned int time_wait = 0; if (!this->IsShutdown()) - return 1; + return 0; - if (this->hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)base::Thread,(LPVOID)this,0,&ulThreadId)) + if (hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)base::Thread,(LPVOID)this,0,&ulThreadId)) { + CloseHandle(hThread); syslog << logfile::log_head << "Create thread ... OK" << endl; } else @@ -483,7 +494,7 @@ int base::begin(void) { Sleep(100); time_wait += 100; - if (time_wait > 10000) //Wait 10 seconds + if (time_wait > 30000) //Wait 30 seconds { syslog << logfile::log_head << "Module timeout in begin()" << endl; this->end(); @@ -505,7 +516,7 @@ DWORD base::Thread(LPVOID pParam) p->ulMainThreadId = GetCurrentThreadId(); - if (p->GetParentThread()->GetThreadPool()->AddThread(GetCurrentThreadId(), CLOCKS_PER_SEC * 30) != 0) + if (p->GetParentThread()->GetThreadPool()->AddThread(GetCurrentThreadId(), CLOCKS_PER_SEC * 60) != 0) { syslog << logfile::log_head << "Register thread ... Failed" << endl; }