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.