btnlisten->enabled=false;
btndisconnect->enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall tform1::clientsocket1connect(tobject *sender,
tcustomwinsocket *socket)
{
//当用户提出连接请求后,客户端会触发oncreate事件,
statusbar1->simpletext="连接到:"+server;
}
//---------------------------------------------------------------------------
void __fastcall tform1::serversocket1accept(tobject *sender,
tcustomwinsocket *socket)
{
//在服务器接受了客户的请求后会触发onaccept事件,
//在这个事件处理程序中将标志服务器端的变量isserver设为true,
isserver=true;
statusbar1->simpletext="连接到:"+socket->remoteaddress;
}
//---------------------------------------------------------------------------
//---- 非阻塞传输方式,当其中的一方进行写操作时,
//另一方会触发onread事件(客户端)或onclientread事件(服务器端),
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="正在监听...";
}
//---------------------------------------------------------------------------
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)
{
//---- 此外在客户端还应该增加错误捕获机制,
//当用户输入无效的服务器名或服务器端没有
//处于监听状态时能够及时给用户反馈信息。
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 责任人, 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; //用户帐号