📄 u_web_dm.pas
字号:
unit U_WEB_DM;
interface
uses
SysUtils, Classes, DB, dbisamtb, p2p_public, IdUDPBase, IdUDPClient, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdUDPServer, IdSocketHandle,
DBTables;
type
TF_WEB_DM = class(TDataModule)
db_webmis: TDBISAMDatabase;
qy_wangy_dbi: TDBISAMQuery;
ID_TCP: TIdTCPClient;
ID_UDP: TIdUDPServer;
WEBDB: TDatabase;
qy_wangy: TQuery;
function save_myip(m_accno, m_ipaddr, m_port: string): boolean;
procedure ID_UDPUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
function ProcRecvLogonData(ThisBinding: TIdSocketHandle; LogonData: TLogonData): boolean;
//function ProcRecvFriendData(ThisBinding: TIdSocketHandle; UserData: TUserData): Boolean;
public
{ Public declarations }
end;
var
F_WEB_DM: TF_WEB_DM;
implementation
uses pub_program, u_web_main, U_WEB_XTDL, U_WEB_CHAT;
{$R *.dfm}
function TF_WEB_DM.save_myip(m_accno, m_ipaddr, m_port: string): boolean;
var
s: string;
i: integer;
begin
with qy_wangy do
begin
close;
sql.Clear;
sql.Add('select flag from userdb where accno=:vaccno');
parambyname('vaccno').asstring := m_accno;
open;
i := fieldbyname('flag').asinteger;
close;
sql.Clear;
sql.Add('insert into userip(accno,flag,ipaddr,port,date) values(:vaccno,:vflag,:vipaddr,:vport,:vdate)');
parambyname('vaccno').asstring := m_accno;
parambyname('vflag').asinteger := i;
parambyname('vipaddr').asstring := m_ipaddr;
parambyname('vport').asstring := m_port;
parambyname('vdate').asdatetime := now;
execsql;
close;
end;
end;
function TF_WEB_DM.ProcRecvLogonData(ThisBinding: TIdSocketHandle; LogonData: TLogonData): boolean;
var
_LogonDataPackage: TLogonDataPackage;
_HandDataPackage: THandDataPackage;
_tempUserBasicInfo: TServerUserBasicInfo;
_Account, _PeerIP, _tempIP, _NeedReBack, _isLogin: string;
i, _PeerPORT, _tempPORT: integer;
begin
_Account := LogonData.Account;
_PeerIP := thisbinding.PeerIP;
_PeerPORT := thisbinding.PeerPort;
_IsLogin := LogonData.lResult;
Gstr_SerIP := _PeerIP;
Gint_SerPORT := _PeerPORT;
gstr_MyIP := LogonData.MyPublicIP;
Gint_MyPort := StrToInt(LogonData.MyPublicPORT);
gstr_MyAcc := LogonData.Account;
tran_str := 'result:' + getstr(_IsLogin, '-1') + '*';
//登录后,要先清一下本地的无用IP
with qy_wangy do
begin
close;
sql.Clear;
sql.Add('delete from userip where accno=:vaccno');
parambyname('vaccno').asstring := gstr_MyAcc;
execsql;
close;
end;
save_myip(gstr_MyAcc, gstr_MyIP, inttostr(Gint_MyPort));
case g_mshow of
0:
begin
f_web_xtdl.showmain;
f_web_main.add_user(Gstr_MyAcc, gstr_MyIP, inttostr(Gint_MyPort));
end;
1: ;
else
;
end;
end;
procedure TF_WEB_DM.ID_UDPUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
_UDPHead: TTQQUDPHead;
_LogonData: TLogonData;
_LogoutData: TLogoutData;
_UserData: TUserData;
_HandData: THandData;
_ChatData: TChatData;
RecvSize, MsgType: integer;
begin
try
MsgType := -1;
RecvSize := adata.Read(_UDPHead, sizeof(_UDPHead)); //接收数据头
MsgType := StrToInt(_UDPHead.MsgType);
if Msgtype = -1 then exit;
//UDPSERVER.Binding.Assign(ABinding); //2005-02-17 Updated!
case MsgType of
LogonSign:
begin
//登录 <--Server ReBack
Adata.Read(_LogonData, sizeof(TLogonData));
ProcRecvLogonData(Abinding, _LogonData);
end;
LogoutSign:
begin
//注销 <--Server or Friend
Adata.Read(_LogoutData, sizeof(TLogoutData));
f_web_main.ProcRecvLogoutData(Abinding, _LogoutData);
end;
FriendDataSign:
begin
//收到好友列表信息
Adata.Read(_UserData, sizeof(TUserData));
f_web_main.ProcRecvFriendData(Abinding, _UserData);
end;
HandSign:
begin
//处理P2P请求
Adata.Read(_HandData, sizeof(THandData));
f_web_main.ProcRecvP2PData(Abinding, _HandData);
end;
ChatMsgSign:
begin
//处理聊天消息
Adata.Read(_ChatData, sizeof(TChatData));
f_web_main.ProcRecvChatMsgData(Abinding, _ChatData);
end;
end;
except on E: Exception do
//Memo1.lines.add(E.Message);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -