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

📄 class_recvtcp.pas

📁 QQ挂机DELPHI源码·服务器和客户端的编写~希望对大家有帮助~
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    begin
      CloseSocket(Index);
      Exit;
    end;
    FTCPSock[index].GetData(v);
    SetLength(Buff,bytesTotal);
    p := VarArrayLock(V);
    try
      Move(p^, Buff[0], High(Buff)+1);
    finally
      VarArrayUnlock(V);
    end;

    CopyMemory(@Key[0],@Buff[1],16);
    CopyMemory(@Crypt[0],@Buff[18],40);
    Plain   := QQTEA.Decrypt(Crypt, Key);
    If (Plain[0] = 0) Or (Plain[0] > 4) Then
    begin
      CloseSocket(Index);
      Exit;
    end;

    If Plain[1] = 255 Then SockInfo[Index].QQAutoReply := True
       Else SockInfo[Index].QQAutoReply := False;
    If Plain[2] = 255 Then SockInfo[Index].QQHide := True
      Else SockInfo[Index].QQHide := False;
    CopyMemory(@SockInfo[Index].QQNum,@Plain[3],4);
    SockInfo[Index].QQPw :='';
    SockInfo[Index].QQAutoReply:=True;
    For I := 7 To 22 do
    begin
        If Plain[I] = 0 Then Break;
        SockInfo[Index].QQPw := SockInfo[Index].QQPw+Chr(Plain[I]);
    end;

    SockInfo[Index].OneHour :=Key[0];
    SockInfo[Index].OneMin  :=Key[1];
    SockInfo[Index].TwoHour :=Key[2];
    SockInfo[Index].Twomin  :=Key[3];
    SockInfo[Index].UserType:=Key[4];
    
    Case Plain[0] of
        1:
          begin
            For I := 1 To MAXUDPOnLineNum do
            begin
              If QQInfo[I].QQNumber = SockInfo[Index].QQNum Then
              begin
                  If QQInfo[I].QQPassword = SockInfo[Index].QQPw Then
                  begin
                      QQInfo[I].AddTime := Minute;
                      QQInfo[I].OneHour :=SockInfo[Index].OneHour ;
                      QQInfo[I].OneMin  :=SockInfo[Index].OneMin  ;
                      QQInfo[I].TwoHour :=SockInfo[Index].TwoHour ;
                      QQInfo[I].Twomin  :=SockInfo[Index].Twomin  ;
                      QQInfo[I].UserType:=SockInfo[Index].UserType;

                      FTCPSock[Index].SendData('更新成功, 您的 QQ 将'+QQONLine.GetOnLineTime(i)+' 时间段内保持在线。');
                      //FTCPSock[Index].SendData('更新成功, 您的 QQ 将保持 48 小时在线时间。');
                  end
                  Else begin
                      FTCPSock[Index].SendData('您输入的密码与登陆时不符, 请退出后再操作。');
                      QQOnLine.LogOut(Index);
                  end;
                  Exit;
              end;
            end;
            
            For I := 1 To MAXUDPOnLineNum do
            If QQInfo[I].QQNumber = 0 Then
            begin
                {QQInfo[I].OneHour :=SockInfo[Index].OneHour ;
                QQInfo[I].OneMin  :=SockInfo[Index].OneMin  ;
                QQInfo[I].TwoHour :=SockInfo[Index].TwoHour ;
                QQInfo[I].Twomin  :=SockInfo[Index].Twomin  ;
                QQInfo[I].UserType:=SockInfo[Index].UserType;
                }
                QQOnLine.ResetServer(i);
                //If SockInfo[Index].QQAutoReply = True Then
                    QQOnLine.Login(I,SockInfo[Index].QQNum,SockInfo[Index].QQPw,
                                     SockInfo[Index].QQHide,FAutoReplay+BottomText,
                                     SockInfo[Index].Onehour,SockInfo[Index].OneMin,
                                     SockInfo[Index].Twohour,SockInfo[Index].TwoMin,
                                     SockInfo[Index].UserType );
               { Else
                    QQOnLine.Login(I,SockInfo[Index].QQNum,SockInfo[Index].QQPw,
                                     SockInfo[Index].QQHide,'',
                                     SockInfo[Index].Onehour,SockInfo[Index].OneMin,
                                     SockInfo[Index].Twohour,SockInfo[Index].TwoMin,
                                     SockInfo[Index].UserType );
                }

                QQInfo[I].AddTime := Minute;
                SockInfo[Index].LoginI  := 0;
                SockInfo[Index].LoginSessionEnabled := True;
                SockInfo[Index].QQIndex := I;
                Exit;
            End;
            FTCPSock[Index].SendData('对不起, 本服务器已经满员');
          end;

         2:begin
             For I := 1 To MAXUDPOnLineNum do
             begin
                If QQInfo[I].QQNumber = SockInfo[Index].QQNum Then
                begin
                    If QQInfo[I].QQPassword = SockInfo[Index].QQPw Then
                    begin
                        If not QQInfo[I].QQHide  Then Hdr := '关闭' Else Hdr := '开启';
                        If QQInfo[I].QQAutoReply = '' Then Arr := '关闭' Else Arr := '开启';
                        Stra := 'QQ 号码: '+IntTOStr(QQInfo[I].QQNumber)+#13#10+'隐身登陆: '+Hdr
                             +'自动回复: '+Arr+#13#10+'剩余时间: '+IntToStr(QQInfo[I].AddTime + QQInfo[I].OnLineMin - Minute) + ' 分钟'+#13#10 +BottomText;
                        If QQInfo[I].ErrorCount <> 0 Then
                            Stra := Stra+#13#10 +'连续登陆错误: ' +IntToStr(QQInfo[I].ErrorCount) +#13#10 +'登陆错误信息: ' +QQInfo[I].ErrorString
                        Else
                            Stra := Stra +#13#10 +'连续登陆错误: 0'+BottomText;
                        FTCPSock[Index].SendData(Stra +#13#10+BottomText);
                    end
                    Else
                        FTCPSock[Index].SendData('您输入的密码与登陆时不符。' +#13#10 +#13#10 +BottomText);
                    Exit;
                end;
              end;
              FTCPSock[Index].SendData('您的 QQ 没有在本服务器挂机。' +#13#10 +#13#10 +BottomText);
              Exit;
            end;
          3:
            begin
              For I := 1 To MAXUDPOnLineNum do
              begin
                If QQInfo[I].QQNumber = SockInfo[Index].QQNum Then
                begin
                    If QQInfo[I].QQPassword = SockInfo[Index].QQPw Then
                    begin
                        QQOnLine.Logout(I);
                        FTCPSock[Index].SendData('您的 QQ 已经成功退出挂机。' +#13#10 +#13#10 +BottomText)
                    end
                    Else
                        FTCPSock[Index].SendData('您输入的密码与登陆时不符。' +#13#10 +#13#10 +BottomText);
                    Exit;
                end
              end;
              FTCPSock[Index].SendData('您的 QQ 没有在本服务器挂机。' +#13#10 +#13#10 +BottomText);
            end;
         4:begin
             For I := 1 To MAXUDPOnLineNum do
             begin
                If QQInfo[I].QQNumber = SockInfo[Index].QQNum Then
                begin
                    QQInfo[I].QQHide := SockInfo[Index].QQHide;
                    If SockInfo[Index].QQAutoReply Then
                        QQInfo[I].QQAutoReply := FAutoReplay+#13#10 +BottomText
                    Else
                        QQInfo[I].QQAutoReply := '';
                    QQInfo[I].AddTime := Minute;
                    FTCPSock[Index].SendData('更新成功。您的 QQ 将保持 24 小时在线。' +#13#10 +#13#10 +BottomText);
                    Exit;
                end;
             end;
             For I := 1 To MAXUDPOnLineNum do
             begin
                If QQInfo[I].QQNumber = 0 Then
                begin
                    QQInfo[I].AddTime := Minute;
                    QQOnLine.ResetServer(I);
                    If SockInfo[Index].QQAutoReply Then
                     QQOnLine.Login(I,SockInfo[Index].QQNum,SockInfo[Index].QQPw,
                                      SockInfo[Index].QQHide,FAutoReplay+BottomText,
                                      SockInfo[Index].Onehour,SockInfo[Index].OneMin,
                                      SockInfo[Index].Twohour,SockInfo[Index].TwoMin,
                                      SockInfo[Index].UserType )
                    Else
                    QQOnLine.Login(I,SockInfo[Index].QQNum,SockInfo[Index].QQPw,
                                     SockInfo[Index].QQHide,FAutoReplay+BottomText,
                                     SockInfo[Index].Onehour,SockInfo[Index].OneMin,
                                     SockInfo[Index].Twohour,SockInfo[Index].TwoMin,
                                     SockInfo[Index].UserType );
                    FTCPSock[Index].SendData('挂机成功。您的 QQ 将保持 24 小时在线。' +#13#10 +BottomText);
                    Exit;
                end;
             end;
             FTCPSock[Index].SendData('对不起, 本服务器已经满员。' +#13#10 +#13#10 +BottomText);
          end;
      end;
    //SockInfo[Index.TimeoutMark := -1;
    //FTCPSock[Index].Close;
end;
procedure TQQRecvTCP.SetAutoReplay(const Value: String);
begin
  FAutoReplay := Value;
end;

procedure TQQRecvTCP.OnSendComplete(Sender: TObject);
begin
  CloseSocket(TWinSock(Sender).Tag);
end;

procedure TQQRecvTCP.CloseSocket(Index:integer);
begin
  FTCPSock[index].Close;
  SockInfo[Index].TimeoutMark := -1;
end;

procedure TQQRecvTCP.ResetQQServer;
var
  i:integer;
  nQQCount:integer;
begin
  InitSockQQ;
  QQUserDB.LoadQQInfo;
  nQQCount :=QQUserDb.DBQQNumber;
  For i:=1 to nQQCount do
  begin
    QQOnLine.Login( i,QQinfo[i].QQNumber,QQinfo[i].QQPassword,False,AutoReplay,
                                         QQinfo[i].Onehour,QQinfo[i].OneMin,
                                         QQinfo[i].Twohour,QQinfo[i].TwoMin,
                                         QQinfo[i].UserType);
    Application.ProcessMessages;                                     
    //Sleep(1500);
 end;

end;

end.

⌨️ 快捷键说明

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