一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二...
一个消息提示托盘程序的开发历程(采用socket技术,附源代码)二...:
娑堟伅鎻愮ず宸ュ叿婧愮爜锛?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; //鏈嶅姟鍣↖p
public: // 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