M
muhx
Unregistered / Unconfirmed
GUEST, unregistred user!
为了方便说明问题,使用下面例子
客户端登录服务器,过程如下
1.客户端发送登录请求 function Login(const ACode, APassword: string): Boolean;
2.将这个命令组织成报文并发送给服务器,通讯部分略过不必考虑;
3.服务端接收报文后解析,并查询服务器,执行相应操作,得到结果,假设结果就是一个Boolean型的值,True表示登录成功,Flase表示登录失败
4.服务器将结果发报文给客户端,客户端接收得到结果
我现在的做法是使用一个全局变量(实际是类的数据成员)表示登录状态,当客户端发送完报文后就等待状态是否变化,伪代码如下:
private
FLogined: Boolean;
//是否登录成功, 初始值为False
function Login(const ACode, APassword: string): Boolean;
begin
Result := False;
{ 组织报文并发送给服务端 }
SendPackage(ACode, APassword);
{ 等待服务端返回结果 }
for I := 1 to 20do
begin
if FLogined then
begin
Result := True;
Exit;
end;
Application.ProcessMessage;
Sleep(20);
end;
end;
{ 客户端接收到服务端返回报文后直接调用这个过程 }
procedure LoginResult;
begin
FLogined := True;
if RecvPackage then
FLogined := True;
end;
现在我觉得用这个方法虽然能解决问题但是比较笨,若有很多个交易就要有很多的状态变量,不知道大家有没有好的方法
先送200分,若不够另外开贴送分:)
客户端登录服务器,过程如下
1.客户端发送登录请求 function Login(const ACode, APassword: string): Boolean;
2.将这个命令组织成报文并发送给服务器,通讯部分略过不必考虑;
3.服务端接收报文后解析,并查询服务器,执行相应操作,得到结果,假设结果就是一个Boolean型的值,True表示登录成功,Flase表示登录失败
4.服务器将结果发报文给客户端,客户端接收得到结果
我现在的做法是使用一个全局变量(实际是类的数据成员)表示登录状态,当客户端发送完报文后就等待状态是否变化,伪代码如下:
private
FLogined: Boolean;
//是否登录成功, 初始值为False
function Login(const ACode, APassword: string): Boolean;
begin
Result := False;
{ 组织报文并发送给服务端 }
SendPackage(ACode, APassword);
{ 等待服务端返回结果 }
for I := 1 to 20do
begin
if FLogined then
begin
Result := True;
Exit;
end;
Application.ProcessMessage;
Sleep(20);
end;
end;
{ 客户端接收到服务端返回报文后直接调用这个过程 }
procedure LoginResult;
begin
FLogined := True;
if RecvPackage then
FLogined := True;
end;
现在我觉得用这个方法虽然能解决问题但是比较笨,若有很多个交易就要有很多的状态变量,不知道大家有没有好的方法
先送200分,若不够另外开贴送分:)