娑堟伅鎻愮ず宸ュ叿婧愮爜锛?br>鏈嶅姟绔細msg.h/* * create date: 2004-12-01 * create by: 鏉庢槬闆?br> * purpose: 鍗忚鐢ㄨ嚜瀹氫箟娑堟伅缁撴瀯: * messageinfo:浠诲姟娑堟伅 * msgtype娑堟伅澶达細0xa鐧婚檰鎴愬姛,0xb鐧婚檰澶辫触,0xc宸ヤ綔娑堟伅,0xd浠诲姟缁撴潫鏍囪瘑 * logininfo:鐧婚檰娑堟伅 */
//------------------------------------------------------------------------------
struct messageinfo{ //娑堟伅缁撴瀯 int msgtype; //娑堟伅澶达細0xa鐧婚檰鎴愬姛,0xb鐧婚檰澶辫触,0xc宸ヤ綔娑堟伅,0xd浠诲姟缁撴潫鏍囪瘑 char messageid[10]; //浠诲姟搴忓彿 char usrcode[10]; //鐢ㄦ埛甯愬彿 //char tastname[50]; //浠诲姟鍚嶇о char tastname[200]; //浠诲姟鍚嶇о char creattime[20]; //鏃堕棿 };
struct logininfo{ //鐧婚檰淇℃伅 char pwd[20]; //鐢ㄦ埛瀵嗙爜 char userid[30]; //鐢ㄦ埛id };//------------------------------------------------------------------------------
unit1.cpp//---------------------------------------------------------------------------
#include <vcl.h>#pragma hdrstop#include "unit1.h"#include "unit2.h"#include "msg.h"#include <inifiles.hpp>//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"tform1 *form1;string myprovider;//鏁版嵁搴撹繛鎺ュ瓧绗?br>int port; //绔彛;//---------------------------------------------------------------------------__fastcall tform1::tform1(tcomponent* owner) : tform(owner){ isserver=false; server="localhost";}//---------------------------------------------------------------------------
void __fastcall tform1::formcreate(tobject *sender){//char dir[max_path];//----鑾峰彇杩愯绋嬪簭鐨勭洰褰曞紑濮?br>char *tfile = "/config.ini";//灏嗙▼搴忕幇鍦ㄧ洰褰曟墍鍦ㄨ緭鍏ユ瀛楃鏁扮粍::getcurrentdirectory(max_path,dir);//灏嗙幇鍦ㄧ洰褰曞姞涓婃寚瀹氭枃浠跺悕strcat(dir,tfile);//----鑾峰彇杩愯绋嬪簭鐨勭洰褰曠粨鏉?br>tinifile *ini = new tinifile(dir);try{ myprovider = ini->readstring("servercfg","provider","provider=oraoledb.oracle.1;password=pwsc;persist security info=true;user id=developer;data source=dl;extended properties="""); port = ini->readinteger("servercfg","port",1555);}catch(...){ messagebox(application->handle,"璇诲彇閰嶇疆鏂囦欢config.ini澶辫触!","淇℃伅鎻愮ず!",mb_ok+mb_iconinformation+mb_systemmodal); delete ini;}delete ini; adoconnection1->connectionstring = myprovider; adoconnection1->loginprompt = false; try { adoconnection1->open(); } catch(...) { showmessage("鏃犳硶杩炴帴鏁版嵁搴?); return; }
btndisconnect->enabled=false;}//---------------------------------------------------------------------------
void __fastcall tform1::btnlistenclick(tobject *sender){//绋嬪簭杩愯鍚庯紝濡傛灉鐢ㄦ埛鎸変笅锛傜洃鍚紓閽紝//鍒欏皢璇ョ▼搴忚涓烘湇鍔″櫒绔紝//杩欐椂搴斿皢tserversocket鐨凙ctive灞炴€ц涓篢rue锛?br>//浣挎湇鍔″櫒鑷姩杩涘叆鐩戝惉鐘舵€併€?br> serversocket1->port = port; serversocket1->active=true; statusbar1->simpletext="姝e湪鐩戝惉..."; btnlisten->enabled=false; btndisconnect->enabled=true;
}//---------------------------------------------------------------------------void __fastcall tform1::clientsocket1connect(tobject *sender, tcustomwinsocket *socket){//褰撶敤鎴锋彁鍑鸿繛鎺ヨ姹傚悗锛屽鎴风浼氳е鍙慜ncreate浜嬩欢锛?br> statusbar1->simpletext="杩炴帴鍒?"+server;}//---------------------------------------------------------------------------void __fastcall tform1::serversocket1accept(tobject *sender, tcustomwinsocket *socket){//鍦ㄦ湇鍔″櫒鎺ュ彈浜嗗鎴风殑璇锋眰鍚庝細瑙﹀彂onaccept浜嬩欢锛?br>//鍦ㄨ繖涓簨浠跺鐞嗙▼搴忎腑灏嗘爣蹇楁湇鍔″櫒绔殑鍙橀噺isserver璁句负true锛?br> isserver=true; statusbar1->simpletext="杩炴帴鍒?"+socket->remoteaddress;
}//---------------------------------------------------------------------------//---- 闈為樆濉炰紶杈撴柟寮忥紝褰撳叾涓殑涓€鏂硅繘琛屽啓鎿嶄綔鏃讹紝//鍙︿竴鏂逛細瑙﹀彂onread浜嬩欢(瀹㈡埛绔?鎴朞nclientread浜嬩欢(鏈嶅姟鍣ㄧ)锛?br>void __fastcall tform1::serversocket1clientread(tobject *sender, tcustomwinsocket *socket){logininfo *loginfo = new logininfo;socket->receivebuf(loginfo,50); string mysql = "select yhxh from xt_yh where yhbh="; mysql+=loginfo->userid; mysql+=" and pwd="; mysql+=loginfo->pwd; mysql+=""; adoquery2->close(); adoquery2->connection = adoconnection1; adoquery2->sql->clear(); adoquery2->sql->add(mysql); adoquery2->open(); int num = adoquery2->recordcount; messageinfo *loginmsg = new messageinfo; int msgtype; if(num>0){ msgtype=0xa; //ok loginmsg->msgtype=msgtype; }else{ msgtype=0xb; //nobody loginmsg->msgtype=msgtype; } for(int i=0;i<serversocket1->socket->activeconnections;i++){ if(serversocket1->socket->connections[i]->remoteaddress==socket->remoteaddress) serversocket1->socket->connections[i]->sendbuf(loginmsg,244); } adoquery2->close();
}//---------------------------------------------------------------------------void __fastcall tform1::btndisconnectclick(tobject *sender){serversocket1->close();btnlisten->enabled=true;btndisconnect->enabled=false;}//---------------------------------------------------------------------------void __fastcall tform1::serversocket1clientdisconnect(tobject *sender, tcustomwinsocket *socket){statusbar1->simpletext="姝e湪鐩戝惉...";}//---------------------------------------------------------------------------void __fastcall tform1::clientsocket1disconnect(tobject *sender, tcustomwinsocket *socket){ btnlisten->enabled=true; btndisconnect->enabled=false; statusbar1->simpletext="";}//---------------------------------------------------------------------------void __fastcall tform1::clientsocket1error(tobject *sender, tcustomwinsocket *socket, terrorevent errorevent, int &errorcode){//---- 姝ゅ鍦ㄥ鎴风杩樺簲璇ュ鍔犻敊璇崟鑾锋満鍒讹紝//褰撶敤鎴疯緭鍏ユ棤鏁堢殑鏈嶅姟鍣ㄥ悕鎴栨湇鍔″櫒绔病鏈?br>//澶勪簬鐩戝惉鐘舵€佹椂鑳藉鍙婃椂缁欑敤鎴峰弽棣堜俊鎭€?br> statusbar1->simpletext="鏃犳硶杩炴帴鍒?"+socket->remotehost; errorcode=0;}//---------------------------------------------------------------------------
void __fastcall tform1::timer1timer(tobject *sender){ try{ if(adoconnection1->connected){ string strmessage=""; adoquery1->close(); adoquery1->connection = adoconnection1; adoquery1->sql->clear(); adoquery1->sql->add("select t.message_id as 搴忓彿,t.user_code as 璐d换浜? t.message_title as 浠诲姟鍚嶇о, to_char(t.create_time,yyyy-mm-dd hh24:mi) as 鏃堕棿, t.is_read as 鏄惁闃呰 from user_message t where t.is_read=f and t.task_state = assign order by t.message_id"); adoquery1->open(); messageinfo *msg = new messageinfo;
string messageid; //浠诲姟搴忓彿 string usrcode; //鐢ㄦ埛甯愬彿 string tastname; //浠诲姟鍚嶇о string creattime; //鏃堕棿 while(!adoquery1->eof){ messageid=adoquery1->fieldbyname("搴忓彿")->asstring; usrcode=adoquery1->fieldbyname("璐d换浜?)->asstring; tastname=adoquery1->fieldbyname("浠诲姟鍚嶇о")->asstring; creattime=adoquery1->fieldbyname("鏃堕棿")->asstring; msg->msgtype=0xc; memcpy(msg->messageid,messageid.c_str(),messageid.length()+1); memcpy(msg->usrcode,usrcode.c_str(),usrcode.length()+1); memcpy(msg->tastname,tastname.c_str(),tastname.length()+1); memcpy(msg->creattime,creattime.c_str(),creattime.length()+1); //瀵瑰鎴风鍙戞秷鎭細 for(int i=0;i<serversocket1->socket->activeconnections;i++){ //serversocket1->socket->connections[i]->sendbuf(msg,94); serversocket1->socket->connections[i]->sendbuf(msg,244); sleep(1); } adoquery1->next(); } msg->msgtype=0xd; //缁撴潫绗﹀彿 for(int i=0;i<serversocket1->socket->activeconnections;i++){ //serversocket1->socket->connections[i]->sendbuf(msg,94); serversocket1->socket->connections[i]->sendbuf(msg,244); sleep(1); //鍋?ms寰堝叧閿?br> } delete msg; }else{ timer1->enabled=false; } } catch(...){ application->messagebox("璁块棶鏁版嵁搴撻敊璇紒璇烽噸鏂板惎鍔ㄧ▼搴忋€?,null,mb_ok); application->terminate(); }}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1clienterror(tobject *sender, tcustomwinsocket *socket, terrorevent errorevent, int &errorcode){ errorcode=0;}//---------------------------------------------------------------------------
void __fastcall tform1::n2click(tobject *sender){ application->terminate(); }//---------------------------------------------------------------------------
void __fastcall tform1::n3click(tobject *sender){formabout->showmodal();}//---------------------------------------------------------------------------
unit1.h
//---------------------------------------------------------------------------
#ifndef unit1h#define unit1h//---------------------------------------------------------------------------#include <classes.hpp>#include <controls.hpp>#include <stdctrls.hpp>#include <forms.hpp>#include <comctrls.hpp>#include <extctrls.hpp>#include <scktcomp.hpp>#include <adodb.hpp>#include <db.hpp>#include <dbgrids.hpp>#include <grids.hpp>#include <menus.hpp>//---------------------------------------------------------------------------class tform1 : public tform{__published: // ide-managed components tserversocket *serversocket1; tpanel *panel1; tbutton *btnlisten; tbutton *btndisconnect; tstatusbar *statusbar1; tadoconnection *adoconnection1; tadoquery *adoquery1; tdbgrid *dbgrid1; tdatasource *datasource1; ttimer *timer1; tadoquery *adoquery2; tgroupbox *groupbox1; tmainmenu *mainmenu1; tmenuitem *n1; tmenuitem *n2; tmenuitem *n3; tmenuitem *n4; tmenuitem *n5; tmenuitem *n6; void __fastcall formcreate(tobject *sender); void __fastcall btnlistenclick(tobject *sender); void __fastcall clientsocket1connect(tobject *sender, tcustomwinsocket *socket); void __fastcall serversocket1accept(tobject *sender, tcustomwinsocket *socket); void __fastcall serversocket1clientread(tobject *sender, tcustomwinsocket *socket); void __fastcall btndisconnectclick(tobject *sender); void __fastcall serversocket1clientdisconnect(tobject *sender, tcustomwinsocket *socket); void __fastcall clientsocket1disconnect(tobject *sender, tcustomwinsocket *socket); void __fastcall clientsocket1error(tobject *sender, tcustomwinsocket *socket, terrorevent errorevent, int &errorcode); void __fastcall timer1timer(tobject *sender); void __fastcall serversocket1clienterror(tobject *sender, tcustomwinsocket *socket, terrorevent errorevent, int &errorcode); void __fastcall n2click(tobject *sender); void __fastcall n3click(tobject *sender);private: // user declarations bool isserver; //鏈嶅姟鍣ㄦ爣璇?br> string server; //鏈嶅姟鍣↖ppublic: // user declarations __fastcall tform1(tcomponent* owner);};//---------------------------------------------------------------------------extern package tform1 *form1;//---------------------------------------------------------------------------#endif
unit2.h//---------------------------------------------------------------------------
#include <vcl.h>#pragma hdrstop
#include "unit2.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"tformabout *formabout;//---------------------------------------------------------------------------__fastcall tformabout::tformabout(tcomponent* owner) : tform(owner){}//---------------------------------------------------------------------------void __fastcall tformabout::button1click(tobject *sender){ modalresult = mrok;}//---------------------------------------------------------------------------
unit2.cpp//---------------------------------------------------------------------------
#include <vcl.h>#pragma hdrstop
#include "unit2.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"tformabout *formabout;//---------------------------------------------------------------------------__fastcall tformabout::tformabout(tcomponent* owner) : tform(owner){}//---------------------------------------------------------------------------void __fastcall tformabout::button1click(tobject *sender){ modalresult = mrok;}//---------------------------------------------------------------------------
浠ヤ笂鏄湇鍔$socket绋嬪簭鍙﹀锛屾湇鍔$鐨勯厤缃枃浠禖onfig.ini鍐呭濡備笅锛?br>[servercfg]provider=provider=oraoledb.oracle.1;password=pwsc;persist security info=true;user id=developer;data source=dl;extended properties=""port=1555
