📄 class_recvtcp.~pas
字号:
If bytesTotal <> 59 Then
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 + -