www.pudn.com > 2004021618574529928.rar > UnitFunction.pas
{ 函数单元 }
unit UnitFunction;
interface
uses MainForm, Classes, SysUtils, WinSock, Windows;
procedure SendServerMsg(Msg:String;S:TSocket); //发送服务器消息
Function GetServerMsg:String; //取得服务器消息内容
procedure UpdateSMsg(InBuf:array of Byte;Len:Integer); //更新服务器消息
Function GetChatContent(InBuf:array of Byte;Len:Integer):String; //取得通话内容
implementation
uses DB, ADODB;
procedure SendServerMsg(Msg:String;S:TSocket); //发送服务器消息
var
Buf:array of Byte;
I:Integer;
begin
SetLength(Buf,16 + sizeof(integer)+Length(Msg)+1);
for I:=0 to 16 - 1 do
if ((I mod 2)=0 ) then buf[i]:=$C
else buf[I]:=$A;
CopyMemory(@Buf[16 + sizeof(integer)],@Msg[1],length(Msg));
Buf[length(buf)-1]:=0;
send(S,Buf[0],LengTh(Buf),0);
end;
Function GetServerMsg:String; //取得服务器消息内容
begin
with frmMain.ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('Select Top 1 Content from ServerMsg');
Open;
end;
Result:=frmMain.ADOQuery.FieldByName('Content').AsString;
end;
procedure UpdateSMsg(InBuf:array of Byte;Len:Integer); //更新服务器消息
var
BasePos:Integer;
TempLen:Integer;
TempStr:String;
TempMsg:WideString;
PassWord:Integer;
begin
BasePos:=16;
TempStr:='';
PassWord:=Pinteger(@InBuf[BasePos])^;
if PassWord <> 33 then Exit; //数字码验证 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Inc(BasePos,SizeOf(Integer));
while (basepos0) do inc(basepos);
TempLen:=length(TempStr);
SetLength(TempStr,TempLen+basepos-(16 + sizeof(integer)));
copymemory(@TempStr[TempLen+1],@inbuf[16 + sizeof(integer)],basepos-(16 + sizeof(integer)));
TempMsg:=Copy(TempStr,TempLen + 1,(LengTh(TempStr) - TempLen));
with frmMain.ADOQuery do
begin
Close;
SQL.Clear;
SQL.Add('update ServerMsg set Content=' + '''' + TempMsg + '''');
ExecSQL;
end;
end;
Function GetChatContent(InBuf:array of Byte;Len:Integer):String;
var
BasePos:Integer;
TempLen:Integer;
TempStr:String;
begin
BasePos:=16;
Inc(BasePos,SizeOf(Integer));
while (BasePos0) do inc(BasePos);
TempLen:=length(TempStr);
SetLength(TempStr,TempLen+BasePos-(16 + sizeof(integer)));
CopyMemory(@TempStr[templen+1],@inbuf[16 + sizeof(integer)],BasePos-(16 + sizeof(integer))); Result:=Copy(TempStr,TempLen + 1,(LengTh(TempStr) - TempLen)); end;
end.