⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logdatamain.~pas

📁 翎风世界..传奇服务端..DELPHI源代码 包括DBServer,LogDataServer,LoginGate,LoginSrv,M2Server等..内容齐全.
💻 ~PAS
字号:
unit LogDataMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics,
  Controls, Forms, Dialogs, StdCtrls,NMUDP, ExtCtrls,IniFiles;
type
  TFrmLogData=class(TForm)
    NMUDP: TNMUDP;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;

    procedure FormCreate(Sender : TObject);
    procedure FormDestroy(Sender : TObject);
    procedure Timer1Timer(Sender : TObject);
    procedure WriteLogFile();
    function  IntToString(nInt:Integer):String;
    procedure NMUDPDataReceived(Sender: TComponent; NumberBytes: Integer;
      FromIP: String; Port: Integer);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    LogMsgList: TStringList;
    m_boRemoteClose:Boolean;
    { Private declarations }
  public
    procedure MyMessage(var MsgData:TWmCopyData);message WM_COPYDATA;
    { Public declarations }
  end;

var
  FrmLogData: TFrmLogData;


implementation

uses LDShare, Grobal2, HUtil32;

{$R *.DFM}

procedure TFrmLogData.NMUDPDataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String; Port: Integer);
var
  MStream:TMemoryStream;
  s8:String;
begin
try
  try
    MStream:=TMemoryStream.Create;
    NMUDP.ReadStream(MStream);
    setlength(s8,NumberBytes);
    MStream.Read(s8[1],NumberBytes);
    LogMsgList.Add(s8);
  finally
    MStream.Free;
  end;
except

end;
end;

procedure TFrmLogData.FormCreate(Sender : TObject);
var
  Conf:TIniFile;
  nX,nY:Integer;
begin
  g_dwGameCenterHandle:=Str_ToInt(ParamStr(1),0);
  nX:=Str_ToInt(ParamStr(2),-1);
  nY:=Str_ToInt(ParamStr(3),-1);
  if (nX >= 0) or (nY >= 0) then begin
    Left:=nX;
    Top:=nY;
  end;
  m_boRemoteClose:=False;
  SendGameCenterMsg(SG_FORMHANDLE,IntToStr(Self.Handle));
  SendGameCenterMsg(SG_STARTNOW,'正在启动日志服务器...');
  LogMsgList:=TStringList.Create;
  Conf:=TIniFile.Create('.\logdata.ini');
  if Conf <> nil then begin
    sBaseDir:=Conf.ReadString('Setup','BaseDir',sBaseDir);
    sServerName:=Conf.ReadString('Setup','Caption',sServerName);
    sServerName:=Conf.ReadString('Setup','ServerName',sServerName);
    nServerPort:=Conf.ReadInteger('Setup','Port',nServerPort);
    Conf.Free;
  end;
  Caption:=sCaption + ' (' + sServerName + ')';
  NMUDP.LocalPort:=nServerPort;
  SendGameCenterMsg(SG_STARTOK,'日志服务器启动完成...');
end;

procedure TFrmLogData.FormDestroy(Sender : TObject);
begin
  LogMsgList.Free;
end;

procedure TFrmLogData.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if m_boRemoteClose then exit;
  if Application.MessageBox('Do you want to quit?',
                            'Confirm',
                            MB_YESNO + MB_ICONQUESTION ) = IDYES then begin
  end else CanClose:=False;
end;
procedure TFrmLogData.Timer1Timer(Sender : TObject);
begin
  WriteLogFile();
end;

procedure TFrmLogData.WriteLogFile();
var
  I: Integer;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
  sLogDir,sLogFile:String;
  s2E8:String;
  F:TextFile;
begin
  if LogMsgList.Count <= 0 then exit;
  DecodeDate(Date, Year, Month, Day);
  DecodeTime(Time, Hour, Min, Sec, MSec);
  sLogDir:= sBaseDir + IntToStr(Year) + '-' + IntToString(Month) + '-' + IntToString(Day);
  if not FileExists(sLogDir) then begin
    CreateDirectoryA(PChar(sLogDir),nil);
  end;
  sLogFile:=sLogDir + '\Log-' + IntToString(Hour) + 'h' + IntToString((Min div 10) * 2) + 'm.txt';
  Label4.Caption:=sLogFile;
  try
    AssignFile(F,sLogFile);
    if not FileExists(sLogFile) then Rewrite(F)
    else Append(F);
    for i:= 0 to LogMsgList.Count - 1 do begin
      Writeln(F,LogMsgList.Strings[i] + #9 + FormatDateTime('yyyy-mm-dd hh:mm:ss',Now));
      Flush(f)
    end;
    LogMsgList.Clear;
  finally
    CloseFile(F);
  end;
end;

function TFrmLogData.IntToString(nInt:Integer):String;
//0x0044304C
begin
  if nInt < 10 then Result:='0' + IntToStr(nInt)
  else Result:=IntToStr(nInt);
end;



procedure TFrmLogData.MyMessage(var MsgData: TWmCopyData);
var
  sData:String;
  ProgramType:TProgamType;
  wIdent:Word;
begin
  wIdent:=HiWord(MsgData.From);
//  ProgramType:=TProgamType(LoWord(MsgData.From));
  sData:=StrPas(MsgData.CopyDataStruct^.lpData);
  case wIdent of    //
    GS_QUIT: begin
      m_boRemoteClose:=True;
      Close();
    end;
    1: ;
    2: ;
    3: ;
  end;    // case
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -