main.pas

来自「FIR引擎最新源码+注册」· PAS 代码 · 共 596 行 · 第 1/2 页

PAS
596
字号
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JSocket, Share, ExtCtrls, ComCtrls, Mask, RzEdit, StdCtrls,
  EDcode, MSI_CPU, MSI_Storage, MD5EncodeStr, Spin;
type
  TfrmFMain = class(TForm)
    ClientSocket: TClientSocket;
    DecodeTimer: TTimer;
    StatusBar: TStatusBar;
    GroupBoxLogin: TGroupBox;
    Label1: TLabel;
    EditAccout: TEdit;
    Label2: TLabel;
    EditPassword: TEdit;
    GroupBoxUser: TGroupBox;
    Label3: TLabel;
    EditUserAccount: TEdit;
    Label4: TLabel;
    EditUserPassword: TEdit;
    Label5: TLabel;
    EditUserQQ: TEdit;
    RadioGroupUserMode: TRadioGroup;
    Label6: TLabel;
    DateTimeEditStartDate: TRzDateTimeEdit;
    Label7: TLabel;
    DateTimeEditEndDate: TRzDateTimeEdit;
    Label8: TLabel;
    Label9: TLabel;
    EditSerialNumber: TEdit;
    ButtonLogin: TButton;
    ButtonCloseSocket: TButton;
    RadioGroupBind: TRadioGroup;
    ButtonAdd: TButton;
    ButtonDel: TButton;
    ButtonChg: TButton;
    ButtonSearch: TButton;
    Label10: TLabel;
    EditIPaddr: TEdit;
    RadioGroupMainVersion: TRadioGroup;
    Label11: TLabel;
    Label12: TLabel;
    SpinEditPermission: TSpinEdit;
    SpinEditMaxIpCount: TSpinEdit;
    SpinEditMaxDay: TSpinEdit;
    procedure DecodeTimerTimer(Sender: TObject);
    procedure ClientSocketConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocketError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ButtonAddClick(Sender: TObject);
    procedure ButtonLoginClick(Sender: TObject);
    procedure ButtonCloseSocketClick(Sender: TObject);
    procedure ButtonDelClick(Sender: TObject);
    procedure ButtonSearchClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RadioGroupUserModeClick(Sender: TObject);
    procedure RadioGroupBindClick(Sender: TObject);
    procedure SpinEditMaxDayChange(Sender: TObject);

  private
    { Private declarations }
    procedure DecodeMessagePacket(sData: string);
    procedure SendSearchUser(sData: string);
    procedure SendDelUser(sData: string);
    procedure SendChgUser(UserSession: TUserSession);
    procedure SendAddUser(UserSession: TUserSession);
    procedure SendLoginUser(sAccount, sPassword: string);
    procedure SendSocket(Socket: TCustomWinSocket; sSendMsg: string);

    procedure LoginSucces(sData: string);
    procedure LoginFail(nCode: Integer);
    procedure SearchSucces(sData: string);
  public
    { Public declarations }
  end;

var
  frmFMain: TfrmFMain;

implementation
uses HUtil32, Common, EDcodeUnit, Grobal2;
{$R *.dfm}
procedure TfrmFMain.LoginSucces(sData: string);
begin
  g_MySelf.sAccount := g_sAccount;
  g_MySelf.sPassword := g_sPassword;
  g_MySelf.boLogined := True;
  ButtonLogin.Enabled := False;
  ButtonCloseSocket.Enabled := True;
  GroupBoxUser.Enabled := True;
  StatusBar.Panels[1].Text := '登陆成功';
  //Caption := DecryptString(sData);
  Application.MessageBox('登陆成功!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
end;

procedure TfrmFMain.LoginFail(nCode: Integer);
begin
  g_MySelf.boLogined := False;
  ButtonLogin.Enabled := True;
  ButtonCloseSocket.Enabled := False;
  GroupBoxUser.Enabled := False;
  StatusBar.Panels[1].Text := '登陆失败';
  case nCode of
    2: Application.MessageBox('此账号已经登陆在线!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
    3: Application.MessageBox('密码错误!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
  else Application.MessageBox('登陆失败!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
  end;
end;

procedure TfrmFMain.SearchSucces(sData: string);
var
  UserSession: TUserSession;
begin
  FillChar(UserSession, SizeOf(TUserSession), 0);
  DecryptBuffer(sData, @UserSession, SizeOf(TUserSession));
  EditUserAccount.Text := UserSession.sAccount;
  EditUserPassword.Text := UserSession.sPassword;
  EditUserQQ.Text := IntToStr(UserSession.nUserQQ);
  EditSerialNumber.Text := UserSession.sSerialNumber;
  EditIPaddr.Text := MakeIntToIP(UserSession.nUserIPaddr);
  SpinEditMaxIpCount.Value := UserSession.nLicCount;
  DateTimeEditStartDate.Date := UserSession.dStartDate;
  DateTimeEditEndDate.Date := UserSession.dEndDate;
  SpinEditMaxDay.Value := UserSession.nLicCount;
  RadioGroupUserMode.ItemIndex := UserSession.btMode - 1;
  RadioGroupBind.ItemIndex := UserSession.btBind - 1;
  RadioGroupMainVersion.ItemIndex := UserSession.btMainVersion - 1;
  SpinEditPermission.Value := UserSession.btPermission;

  StatusBar.Panels[2].Text := '搜索用户成功';
  GroupBoxUser.Enabled := True;
end;

procedure TfrmFMain.DecodeMessagePacket(sData: string);
var
  sLineText, sGameLineText: string;
  nDataLen, I: Integer;
  sDataMsg, sDefMsg, sDecodeMsg: string;
  DefMsg: TDefaultMessage;
begin
  nDataLen := Length(sData);
  if (nDataLen >= DEFBLOCKSIZE) then begin
    sDefMsg := Copy(sData, 1, DEFBLOCKSIZE);
    sDataMsg := Copy(sData, DEFBLOCKSIZE + 1, Length(sData) - DEFBLOCKSIZE);
    DefMsg := DecodeMessage(sDefMsg);
    case DefMsg.Ident of
      SP_SM_GETUSER_SUCCESS: ;
      SP_SM_GETUSER_FAIL: ;

      SP_SM_ADDUSER_SUCCESS: begin
          StatusBar.Panels[2].Text := '增加用户成功';
          Application.MessageBox('增加用户成功!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          GroupBoxUser.Enabled := True;
        end;
      SP_SM_ADDUSER_FAIL: begin
          StatusBar.Panels[2].Text := '增加用户失败';
          case DefMsg.Recog of
            0: Application.MessageBox('此用户已经存在!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -1: Application.MessageBox('用户IP不正确!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -2: Application.MessageBox('你的账号已经过期!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -3: Application.MessageBox('你没有登陆或者权限不够!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          else Application.MessageBox('增加用户失败!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          end;
          GroupBoxUser.Enabled := True;
        end;
      SP_SM_DELUSER_SUCCESS: begin
          StatusBar.Panels[2].Text := '删除用户成功';
          Application.MessageBox('删除用户成功!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          GroupBoxUser.Enabled := True;
        end;
      SP_SM_DELUSER_FAIL: begin
          StatusBar.Panels[2].Text := '删除用户失败';
          case DefMsg.Recog of
            -4: Application.MessageBox('你没有登陆或者权限不够!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -3: Application.MessageBox('你的账号已经过期!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -2: Application.MessageBox('此账号正在使用!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          else Application.MessageBox('删除用户失败!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          end;
          GroupBoxUser.Enabled := True;
        end;
      SP_SM_CHGUSER_SUCCESS,
        SP_SM_CHGUSER_FAIL: begin
          StatusBar.Panels[2].Text := '修改用户数据失败';
          case DefMsg.Recog of
            -4: Application.MessageBox('你没有登陆或者权限不够!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -3: Application.MessageBox('你的账号已经过期!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -2: Application.MessageBox('此账号正在使用!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          else Application.MessageBox('修改用户数据失败!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          end;
          GroupBoxUser.Enabled := True;
        end;
      SP_SM_SEARCHUSER_SUCCESS: SearchSucces(sDataMsg);

      SP_SM_SEARCHUSER_FAIL: begin
          StatusBar.Panels[2].Text := '搜索用户失败';
          StatusBar.Panels[2].Text := '搜索用户失败失败';
          case DefMsg.Recog of
            -3: Application.MessageBox('你没有登陆或者权限不够!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
            -4: Application.MessageBox('你的账号已经过期!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          else Application.MessageBox('搜索用户失败!!!', '提示信息', MB_OK + MB_ICONINFORMATION);
          end;
          GroupBoxUser.Enabled := True;
        end;
      SM_LOGIN_SUCCESS: LoginSucces(sDataMsg);
      SM_LOGIN_FAIL: LoginFail(DefMsg.Recog);
      SM_GETUSER_SUCCESS: ;
      SM_GETUSER_FAIL: ;
      SM_ADDUSER_SUCCESS: ;
      SM_ADDUSER_FAIL: ;
      SM_DELUSER_SUCCESS: ;
      SM_DELUSER_FAIL: ;
      SM_CHGUSER_SUCCESS: ;
      SM_CHGUSER_FAIL: ;
      SM_SEARCHUSER_SUCCESS: ;
      SM_SEARCHUSER_FAIL: ;
    end;
  end;
end;

procedure TfrmFMain.DecodeTimerTimer(Sender: TObject);
var
  sData: string;
begin
  if g_boBusy then Exit;
  g_boBusy := True;
  try
    g_sRecvGameMsg := g_sRecvGameMsg + g_sRecvMsg;
    g_sRecvMsg := '';
    if g_sRecvGameMsg <> '' then begin
      while Pos('!', g_sRecvGameMsg) > 0 do begin
        if Pos('!', g_sRecvGameMsg) <= 0 then Break;
        g_sRecvGameMsg := ArrestStringEx(g_sRecvGameMsg, '#', '!', sData);
        if sData = '' then Break;
        DecodeMessagePacket(sData);
        if Pos('!', g_sRecvGameMsg) <= 0 then Break;
      end;
    end;
  finally
    g_boBusy := False;
  end;
end;

procedure TfrmFMain.ClientSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  FillChar(g_MySelf, SizeOf(TSuperSession), 0);
  g_MySelf.sAccount := '';
  g_MySelf.sPassword := '';
  g_MySelf.nMyQQ := 0;
  g_MySelf.boLogined := False;
  g_sRecvMsg := '';
  g_sRecvGameMsg := '';
  g_boBusy := False;
  StatusBar.Panels[0].Text := '服务器连接成功...';
  StatusBar.Panels[1].Text := '正在登陆...';
  g_boConnect := True;
  SendLoginUser(g_sAccount, g_sPassword);
end;

procedure TfrmFMain.ClientSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  StatusBar.Panels[0].Text := '服务器连接断开...';
  StatusBar.Panels[1].Text := '未登陆';
  g_boConnect := False;
  g_MySelf.boLogined := False;
  ButtonLogin.Enabled := True;
  ButtonCloseSocket.Enabled := False;
  Caption := g_sCaption;
end;

procedure TfrmFMain.ClientSocketRead(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  g_sRecvMsg := g_sRecvMsg + Socket.ReceiveText;
end;

procedure TfrmFMain.ClientSocketError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  ButtonLogin.Enabled := True;
  ButtonCloseSocket.Enabled := False;
  ErrorCode := 0;
  Socket.Close;
end;

procedure TfrmFMain.ButtonLoginClick(Sender: TObject);
var
  sAccount: string;
  sPassword: string;

⌨️ 快捷键说明

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