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

📄 main.~pas

📁 传世最新的商业网关DELPHI7源代码!希望站长通过!!!
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
  nLen:integer;
  Buff:PChar;
  pMsg:pTMsgHeader;
  MsgBuff:PChar;
  TempBuff:PChar;
begin
  try
    ReallocMem(SocketBuffer,nBuffLen + nMsgLen);
    Move(tBuffer^,SocketBuffer[nBuffLen],nMsgLen);
    FreeMem(tBuffer);
    nLen:=nBuffLen + nMsgLen;
    Buff:=SocketBuffer;
    if nLen >= SizeOf(TMsgHeader) then begin  //SizeOf(TMsgHeader)=$14
      while (True) do begin
        pMsg:=pTMsgHeader(Buff);
        if pMsg.dwCode = RUNGATECODE then begin      //$AA55AA55
          if (abs(pMsg.nLength) + SizeOf(TMsgHeader)) > nLen then break;// -> 0045525C
          MsgBuff:=Ptr(LongInt(Buff) + SizeOf(TMsgHeader));
          case pMsg.wIdent of
            GM_CHECKSERVER: begin           //$3
              boCheckServerFail:=False;
              dwCheckServerTick:=GetTickCount();
            end;
            GM_SERVERUSERINDEX: begin            //$6
              if (pMsg.wGateIndex < GATEMAXSESSION) and (pMsg.nSocket = SessionArray[pMsg.wGateIndex].nSckHandle) then begin
                SessionArray[pMsg.wGateIndex].nUserListIndex:=pMsg.nUserListIndex;
              end;//00455218
            end;
            GM_RECEIVE_OK: begin                //$7
              dwCheckServerTimeMin:=GetTickCount - dwCheckServerTick;//dwCheckRecviceTick;
           //   MemoLog.Lines.Add(inttostr(dwCheckServerTimeMin));
              if dwCheckServerTimeMin > dwCheckServerTimeMax then dwCheckServerTimeMax:=dwCheckServerTimeMin;
              dwCheckRecviceTick:=GetTickCount();
              SendServerMsg(GM_RECEIVE_OK,0,0,0,0,nil);
            end;
            GM_DATA: begin                           //$5
              ProcessMakeSocketStr(pMsg.nSocket,pMsg.wGateIndex,MsgBuff,pMsg.nLength);
            end;
            GM_TEST: begin
            //   memolog.Lines.Add('gm_test');
               boCheckProServer:=true;
            end;
          end;
          Buff:=@Buff[SizeOf(TMsgHeader) + abs(pMsg.nLength)];
          //Buff:=Ptr(LongInt(Buff) + (abs(pMsg.nLength) + SizeOf(TMsgHeader)));
          nLen:= nLen - (abs(pMsg.nLength) + SizeOf(TMsgHeader));
        end else begin//00455242
          Inc(Buff);
          Dec(nLen);
          //0045524C                 inc     ds:dword_46950C
        end;
        if nLen < SizeOf(TMsgHeader) then break;
      end;
    end;//0045525C

    if nLen > 0 then begin
      GetMem(TempBuff,nLen);
      Move(Buff^,TempBuff^,nLen);
      FreeMem(SocketBuffer);
      SocketBuffer:=TempBuff;
      nBuffLen:=nLen;
    end else begin//00455297
      FreeMem(SocketBuffer);
      SocketBuffer:=nil;
      nBuffLen:=0;
    end;

  except
    on E:Exception do begin
      AddMainLogMsg('[Exception] ProcReceiveBuffer',1);
    end;
  end;
end;

procedure TFrmMain.ProcessMakeSocketStr(nSocket,nSocketIndex:Integer;Buffer:PChar;nMsgLen:Integer);
//00455CA8
var
  sSendMsg:String;
  pDefMsg:pTDefaultMessage;
  UserData:pTSendUserData;
begin
  try
    sSendMsg:='';
    if nMsgLen < 0 then begin
      sSendMsg:='#' + String(Buffer) + '!';
    end else begin//00455D18
      if (nMsgLen >= SizeOf(TDefaultMessage)) then begin
        pDefMsg:=pTDefaultMessage(Buffer);
        if nMsgLen > SizeOf(TDefaultMessage) then begin
          sSendMsg:='#' + EncodeMessage(pDefMsg^) + String(PChar(@Buffer[SizeOf(TDefaultMessage)])) + '!';
        end else begin//00455D62
          sSendMsg:='#' + EncodeMessage(pDefMsg^) + '!';
        end;
      end;//00455D87
    end;
    if (nSocketIndex >= 0) and (nSocketIndex < GATEMAXSESSION) and (sSendMsg <> '') then begin
      New(UserData);
      UserData.nSocketIdx:=nSocketIndex;
      UserData.nSocketHandle:=nSocket;           ///////这里可以修改封包
      UserData.sMsg:=sSendMsg;
      SendMsgList.Add(UserData);
   //   UserData.sMsg:=strpas(mir2cs(pchar(sSendMsg),length(sSendMsg), UserData.loginok,tpos1[nSocketIndex].tx,tpos1[nSocketIndex].ty,tfpos[nSocketIndex].tx,tfpos[nSocketIndex].ty,tpos1[nSocketIndex].mysex));      //sSendMsg
    {  SendMsgList.Add(UserData);
      if UserData.loginok='%loginok$'  then
        begin
          UserData.loginok:='';
          New(UserData);
          UserData.nSocketIdx:=nSocketIndex;
          UserData.nSocketHandle:=nSocket;
          UserData.sMsg:='#1<<<<<A@<<<<<<<<<!';  //sReviceMsg;  发送查询包裹的消息            //这里可以修改封包
          ReviceMsgList.Add(UserData);
          
          {  sData:='#' + IntToStr(nPacketIdx) + sData + '!';
                    GetMem(Buffer,Length(sData) + 1);
                    Move(sData[1],Buffer^,Length(sData) + 1);
                    SendServerMsg(GM_DATA,
                                  UserData.nSocketIdx,
                                  SessionArray[UserData.nSocketIdx].Socket.SocketHandle,
                                  SessionArray[UserData.nSocketIdx].nUserListIndex,
                                  Length(sData)+ 1,
                                  Buffer);
                    FreeMem(Buffer);


        end; }
    end;                                               
  except
    on E:Exception do begin
      AddMainLogMsg('[Exception] ProcessMakeSocketStr',1);
    end;
  end;
end;

procedure TFrmMain.MENU_CONTROL_CLEAELOGClick(Sender: TObject);
begin
  if Application.MessageBox('是否确认清除显示的日志信息?',
                            '确认信息',
                            MB_OKCANCEL + MB_ICONQUESTION
                            ) <> IDOK then exit;
  MemoLog.Clear;
end;

procedure TFrmMain.MENU_CONTROL_RECONNECTClick(Sender: TObject);
begin
  dwReConnectServerTime:=0;
end;

procedure TFrmMain.MENU_OPTION_GENERALClick(Sender: TObject);
begin
  frmGeneralConfig.Top:=Self.Top + 20;
  frmGeneralConfig.Left:=Self.Left;
  with frmGeneralConfig do begin
    EditGateIPaddr.Text:=GateAddr;
    EditGatePort.Text:=IntToStr(GatePort);
    EditServerIPaddr.Text:=ServerAddr;
    EditServerPort.Text:=IntToStr(ServerPort);
    EditTitle.Text:=TitleName;
    TrackBarLogLevel.Position:=nShowLogLevel;
    ComboBoxShowBite.ItemIndex:=Integer(boShowBite);
  end;
  frmGeneralConfig.ShowModal;
end;

procedure TFrmMain.MENU_OPTION_FILTERMSGClick(Sender: TObject);
var
  i:Integer;
begin
  frmMessageFilterConfig.Top:=Self.Top + 20;
  frmMessageFilterConfig.Left:=Self.Left;
  frmMessageFilterConfig.ListBoxFilterText.Clear;
  try
    CS_FilterMsg.Enter;
    for i:=0 to AbuseList.Count -1 do begin
      frmMessageFilterConfig.ListBoxFilterText.Items.Add(AbuseList.Strings[i]);
    end;
  finally
    CS_FilterMsg.Leave;
  end;
  frmMessageFilterConfig.ButtonDel.Enabled:=False;
  frmMessageFilterConfig.ButtonMod.Enabled:=False;
  frmMessageFilterConfig.ShowModal;
end;

function TFrmMain.IsBlockIP(sIPaddr: String): Boolean;
var
  i:Integer;
  sBlockIPaddr:String;
begin
  Result:=False;
  for I := 0 to TempBlockIPList.Count - 1 do begin
    sBlockIPaddr:= TempBlockIPList.Strings[i];
    if CompareText(sIPaddr,sBlockIPaddr) = 0 then begin
      Result:=True;
      Break;
    end;
  end;
  for I := 0 to BlockIPList.Count - 1 do begin
    sBlockIPaddr:= BlockIPList.Strings[i];
    if CompareLStr(sIPaddr,sBlockIPaddr,Length(sBlockIPaddr)) then begin
      Result:=True;
      Break;
    end;
  end;
end;

function TFrmMain.IsConnLimited(sIPaddr: String): Boolean;
var
  i,nCount:Integer;
begin
  nCount:=0;
  Result:=False;
  for I := 0 to ServerSocket.Socket.ActiveConnections - 1 do begin
    if CompareText(sIPaddr,ServerSocket.Socket.Connections[i].RemoteAddress) = 0 then Inc(nCount);
  end;
  if nCount > nMaxConnOfIPaddr then begin
    Result:=True;
  end;
end;

procedure TFrmMain.MENU_OPTION_IPFILTERClick(Sender: TObject);
var
  i:Integer;
  sIPaddr:String;
begin
  frmIPaddrFilter.Top:=Self.Top + 20;
  frmIPaddrFilter.Left:=Self.Left;
  frmIPaddrFilter.ListBoxActiveList.Clear;
  frmIPaddrFilter.ListBoxTempList.Clear;
  frmIPaddrFilter.ListBoxBlockList.Clear;
  if ServerSocket.Active then
    for i:= 0 to ServerSocket.Socket.ActiveConnections - 1 do begin
      sIPaddr:=ServerSocket.Socket.Connections[i].RemoteAddress;
      if sIPaddr <> '' then
        frmIPaddrFilter.ListBoxActiveList.Items.AddObject(sIPaddr,Tobject(ServerSocket.Socket.Connections[i]));
    end;

  for i:= 0 to TempBlockIPList.Count - 1 do begin
      frmIPaddrFilter.ListBoxTempList.Items.Add(TempBlockIPList.Strings[i]);
  end;
  for i:= 0 to BlockIPList.Count - 1 do begin
      frmIPaddrFilter.ListBoxBlockList.Items.Add(BlockIPList.Strings[i]);
  end;
  frmIPaddrFilter.EditMaxConnect.Value:=nMaxConnOfIPaddr;
  case BlockMethod of
    mDisconnect: frmIPaddrFilter.RadioDisConnect.Checked:=True;
    mBlock: frmIPaddrFilter.RadioAddTempList.Checked:=True;
    mBlockList: frmIPaddrFilter.RadioAddBlockList.Checked:=True;
  end;

  frmIPaddrFilter.EditMaxSize.Value:=nMaxClientPacketSize;
  frmIPaddrFilter.EditNomSize.Value:=nNomClientPacketSize;
  frmIPaddrFilter.EditMaxClientMsgCount.Value:=nMaxClientMsgCount;
  frmIPaddrFilter.CheckBoxLostLine.Checked:=bokickOverPacketSize;
  frmIPaddrFilter.EditClientTimeOutTime.Value:=dwClientTimeOutTime div 1000;
  frmIPaddrFilter.ShowModal;

end;

procedure TFrmMain.CloseConnect(sIPaddr: String);
var
  i:Integer;
  boCheck:Boolean;
begin
  if ServerSocket.Active then
    while (True) do begin
      boCheck:=False;
      for i:= 0 to ServerSocket.Socket.ActiveConnections - 1 do begin
        if sIPaddr=ServerSocket.Socket.Connections[i].RemoteAddress then begin
          ServerSocket.Socket.Connections[i].Close;
          boCheck:=True;
          break;
        end;
      end;
      if not boCheck then break;        
    end;
end;

procedure TFrmMain.MENU_OPTION_PERFORMClick(Sender: TObject);
begin
  frmPrefConfig.boShowOK:=False;
  frmPrefConfig.Top:=Self.Top + 20;
  frmPrefConfig.Left:=Self.Left;
  with frmPrefConfig do begin
    EditServerCheckTimeOut.Value:=dwCheckServerTimeOutTime div 1000;
    EditSendBlockSize.Value:=nClientSendBlockSize;
    {
    EditGateIPaddr.Text:=GateAddr;
    EditGatePort.Text:=IntToStr(GatePort);
    EditServerIPaddr.Text:=ServerAddr;
    EditServerPort.Text:=IntToStr(ServerPort);
    EditTitle.Text:=TitleName;
    TrackBarLogLevel.Position:=nShowLogLevel;
    ComboBoxShowBite.ItemIndex:=Integer(boShowBite);
    }
    boShowOK:=True;
    ShowModal;
  end;
end;

function TFrmMain.CheckDefMsg(DefMsg:pTDefaultMessage;SessionInfo:pTSessionInfo):Boolean;
begin
  Result:=True;
  case DefMsg.Ident of
    CM_WALK,CM_RUN: begin
    end;
    CM_TURN: begin
    end;
    CM_HIT,CM_HEAVYHIT,CM_BIGHIT,CM_POWERHIT,CM_LONGHIT,CM_WIDEHIT,CM_FIREHIT,CM_3026HIT: begin
      if (GetTickCount - SessionInfo.dwHitTick) > dwHitTime then SessionInfo.dwHitTick:=GetTickCount()
       else Result:=False;
    end;
    CM_SPELL: begin
    end;
    CM_DROPITEM: begin
    end;
    CM_PICKUP: begin
    end;
  end;
end;
procedure TFrmMain.CloseAllUser;
var
  nSockIdx:Integer;
begin
  for nSockIdx:=0 to GATEMAXSESSION - 1 do begin
    if SessionArray[nSockIdx].Socket <> nil then 
      SessionArray[nSockIdx].Socket.Close;
  end;
end;

procedure TFrmMain.MENU_CONTROL_RELOADCONFIGClick(Sender: TObject);
begin
  if Application.MessageBox('是否确认重新加载配置信息?',
                            '确认信息',
                            MB_OKCANCEL + MB_ICONQUESTION
                            ) <> IDOK then exit;
  LoadConfig();
end;

procedure TFrmMain.N2Click(Sender: TObject);

begin
  //  about.show;
// MemoLog.Lines.Add(inttostr(sizeof(TcsMAGIC))) ;
//  MemoLog.Lines.Add(inttostr(sizeof(TClientMagic))) ;

 //  MemoLog.Lines.Add(mydecodestring('+JVD<.HE-,,TRi@UhPZhRi@f_a@gaRXiMP6TNRde]aBgbR4YNN9UML6UKN9')+'3');
 //  MemoLog.Lines.Add(mydecodestring('.>V<HJYCHD,WRL6UNM?VML?UNK6'));
//   MemoLog.Lines.Add(mydecodestring('.>V<HJYCHD,WRL6UNL?VNK?U')+'15');
 //  MemoLog.Lines.Add(mydecodestring('+JVD<DhFC;,ZRJ06J,78?.'));

   Memolog.Lines.Add(mydecodestring('+JVD<.HE-,,TRi@UhPZhRi@f_a@gaRXiMP4')+'20');
   Memolog.Lines.Add(mydecodestring('.>V<HJYCHD,WRL6UNL?VNL?V')+'30');

   Memolog.Lines.Add(mydecodestring('-E7+-I.@E,,XRj:c^^,YOO7`[[@ZihZfch@V__Ad'));

   Memolog.Lines.Add(mydecodestring('+JVD<DhFC;,ZRJ06J,78?.'));

end;

procedure TFrmMain.MyMessage(var MsgData: TWmCopyData);
var
  sData:String;
  wIdent:Word;
begin
  wIdent:=HiWord(MsgData.From);
  sData:=StrPas(MsgData.CopyDataStruct^.lpData);
  case wIdent of  
    0: begin                      //  GS_QUIT
      if boServiceStart then begin
        StartTimer.Enabled:=True;
      end else begin
        boClose:=True;
        Close();
      end;
    end;
    1: ;
    2: ;
    3: ;
  end;   
end;

end.

⌨️ 快捷键说明

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