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

📄 misc.pas

📁 flash视频源码 flash视频源码
💻 PAS
字号:
unit misc;

interface

uses server,WinSock,Classes,IniFiles,Windows;

type TRegUser=packed record
       nick:string[20];
       pwd:Integer;
       email,hp:string[80];
       note:string[255];
       color:Integer;
       cloak:Boolean;

       reged,lastlogin:TDateTime;
       active,chatop:Boolean;
     end;
     PRegUser=^TRegUser;

     TPINOmail=packed record
       sender:string[20];
       subject:string[80];
       date:TDateTime;
       msg:string[255];
     end;

const sosa:Integer=SizeOf(TSockAddr);
const soru=SizeOf(TRegUser);
const Build:Word=263;
const IniSections:array[1..5] of string=('General','System rooms','Users','Administration','Banners');
const BS:array[false..true] of Char=('0','1');

var
chatname:string;
welcome:TStringList;
port:Word;
adm_pwd,adm_port:Integer;
bindto,adm_bindto:string;
maxrooms:Integer;
cui:string;
sysrooms:TStringList;
noanos:Boolean;
regpass,maxusers,timeout:Integer;
UserIPs,AdminIPs:TStringList;
bannerupdate:Integer;
banners:TStringList;

synchronizer:TRTLCriticalSection;
chatserver,adm_server:TServer;
pinoroot,logfile:string;
inifile:TIniFile;
userdb:Integer;
db_na:Boolean;
logger:TextFile;
RegUsers,ActUsers:TStringList;
RoomList,OPKicked:TStringList;

function AllowedIP(ip:string;iplist:TStringList;default:Boolean):Boolean;
procedure CloseSock(Socket:TSocket);
procedure Log(st:string);
procedure MakeSystemRooms;
function SystemRoomCount:Integer;


implementation

uses SysUtils, tools, room;

{$I ..\..\defines.inc}

function AllowedIP(ip:string;iplist:TStringList;default:Boolean):Boolean;
var i,i2:Integer;st:string;match:Boolean;rule:Char;PatternTokens,IPtokens:TStringList;
  begin
    Result:=default;

    PatternTokens:=TStringList.Create;
    IPtokens:=TStringList.Create;

    for i:=0 to iplist.Count-1 do
      begin
        st:=iplist[i];
        if Length(st)=0 then Continue;
        rule:=st[1];
        Delete(st,1,1);

        DivUp(st,'.',PatternTokens,4,4);
        DivUp(ip,'.',IPtokens,4,4);
        match:=true;
        for i2:=0 to 3 do if PatternTokens[i2]<>'*' then match:=(match)and(PatternTokens[i2]=IPtokens[i2]);

        if match then
          begin
            case UpCase(rule) of
              'A' :Result:=true;
              'D' :Result:=false;
            end;
            Break;
          end;
      end;

    IPtokens.Free;
    PatternTokens.Free;
  end;

procedure CloseSock(Socket:TSocket);
var linger:TLinger;
  begin
    WinSock.shutdown(Socket,2);
    linger.l_onoff:=1;
    linger.l_linger:=0;
    setsockopt(Socket,SOL_SOCKET,SO_LINGER,@linger,SizeOf(TLinger));
    closesocket(Socket);
  end;

procedure Log(st:string);
  begin
    try
      if FileExists(logfile) then Append(logger) else Rewrite(logger);
        Writeln(logger,'['+FormatDateTime('yyyy.mm.dd hh:nn:ss',Now)+'] '+st);
      CloseFile(logger);
    except
      Writeln('Could not write the Log file.');
    end;
  end;

procedure MakeSystemRooms;
var i,i2:Integer;newroom:TRoom;values:string;
  begin
    for i:=RoomList.Count-1 downto 0 do TRoom(RoomList[i]).Free;

    for i:=0 to sysrooms.Count-1 do
      begin
        newroom:=TRoom.Create(sysrooms.Names[i]);

        values:=sysrooms.Values[newroom.Name];
        i2:=Pos(',',values);
        if i2=0 then i2:=Length(values)+1;

        if i2=7 then
          begin
            newroom.BgCol:=Copy(values,1,6);
            try
              StrToInt('$'+newroom.BgCol);
            except
              newroom.BgCol:='FFFFFF';
            end;
          end else newroom.BgCol:='FFFFFF';

        Delete(values,1,i2);
        newroom.System:=true;
        newroom.Topic:=values;
      end;
  end;

function SystemRoomCount:Integer;
var i:Integer;
  begin
    Result:=0;
    for i:=0 to RoomList.Count-1 do if TRoom(RoomList.Objects[i]).System then Inc(Result) else Exit;
  end;

begin
  pinoroot:=ExtractFilePath(ParamStr(0));
  logfile:=pinoroot+'PINO 3-Server Logfile - '+FormatDateTime('yyyy-mm-dd hh.nn.ss',Now)+'.txt';
  AssignFile(logger,logfile);

  inifile:=TIniFile.Create(pinoroot+'PINO3SRV.INI');

  welcome:=TStringList.Create;
  sysrooms:=TStringList.Create;
  UserIPs:=TStringList.Create;
  AdminIPs:=TStringList.Create;
  banners:=TStringList.Create;

  RegUsers:=TStringList.Create;
  ActUsers:=TStringList.Create;
  RoomList:=TStringList.Create;
  OPKicked:=TStringList.Create;
end.

⌨️ 快捷键说明

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