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

📄 idirc.pas

📁 indy的原文件哈!大家可以下来参考和学习之用.也可以用以作组件.开发其他的应用程序.
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  TIdIRCReplies = class(TPersistent)
  protected
    FFinger: String;
    FVersion: String;
    FUserInfo: String;
    FClientInfo: String;
  public
    constructor Create;
    procedure Assign(Source: TPersistent); override;
  published
    property Finger: String read FFinger write FFinger;
    property Version: String read FVersion write FVersion;
    property UserInfo: String read FUserInfo write FUserInfo;
    property ClientInfo: String read FClientInfo write FClientInfo;
  end;

  { TIdIRCReadThread }
  TIdIRCReadThread = class(TIdThread)
  protected
    FClient: TIdIRC;
    FRecvData: string;
    procedure Run; override;
  public
    constructor Create(AClient: TIdIRC); reintroduce;
  end;

  { TIdIRC }
  TIdIRCUserMode = (umInvisible, umOperator, umServerNotices, umWallops);
  TIdIRCUserModes = Set of TIdIRCUserMode;

  TIdIRCState = (csDisconnect, csDisconnected, csConnecting, csLoggingOn, csConnected);

  TIdIRCUpdateType = (utTopic, utMode, utNicks);

  TIdIRCOnMessage = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; Content: String) of object;
  TIdIRCOnJoin = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
  TIdIRCOnJoined = procedure (Sender: TObject; AChannel: TIdIRCChannel) of object;
  TIdIRCOnPart = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
  TIdIRCOnParted = procedure (Sender: TObject; AChannel: TIdIRCChannel) of object;
  TIdIRCOnKick = procedure (Sender: TObject; AUser, AVictim: TIdIRCUser; AChannel: TIdIRCChannel) of object;
  TIdIRCOnKicked = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
  TIdIRCOnNickChange = procedure (Sender: TObject; AUser: TIdIRCUser; ANewNick: String) of object;
  TIdIRCOnTopic = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; const AChanName, ATopic : String) of object;
  TIdIRCOnQuit = procedure (Sender: TObject; AUser: TIdIRCUser) of object;
  TIdIRCOnNames = procedure (Sender: TObject; AUsers : TIdIRCUsers; AChannel: TIdIRCChannel) of object;
  TIdIRCOnInvite = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: String) of object;
  TIdIRCOnError = procedure (Sender: TObject; AUser: TIdIRCUser; ANumeric, AError: String) of object;
  TIdIRCOnAway = procedure (Sender: TObject; AUser: TIdIRCUser) of object;
  TIdIRCOnWallops = procedure (Sender: TObject; AUser: TIdIRCUser; AContent: String) of object;
  TIdIRCOnSystem = procedure (Sender: TObject; AUser: TIdIRCUser; ACmdCode: Integer; ACommand, AContent: String) of object;
  TIdIRCOnRaw = procedure (Sender: TObject; AUser: TIdIRCUser; ACommand, AContent: String;
    var Suppress: Boolean) of object;
  TIdIRCOnOp = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; ATarget: TIdIRCUser) of object;
  TIdIRCOnBan = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; AHostmask: String) of object;
  TIdIRCOnChannelMode = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel; AChanName: String; AModes: String) of object;
  TIdIRCOnChannelModeChanged = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel) of object;
  TIdIRCOnUserMode = procedure (Sender: TObject; AModes: String) of object;
  TIdIRCOnInviting = procedure (Sender: TObject; ANick, AChannel: String) of object;
  TIdIRCOnKill = procedure (Sender: TObject; User: TIdIRCUser; AVictim, AReason: String) of object;
  TIdIRCOnUnknownCommand = procedure (Sender: TObject; AUser: TIdIRCUser; ACommand, AContent: String) of object;
  TIdIRCOnCTCPQuery = procedure (Sender: TObject; User: TIdIRCUser; AChannel: TIdIRCChannel;
    Command, Args: String; var ASuppress: Boolean) of object;
  TIdIRCOnCTCPReply = procedure (Sender: TObject; AUser: TIdIRCUser; AChannel: TIdIRCChannel;
    Command, Args: String) of object;
  TIdIRCOnSend = procedure (Sender: TObject; ACommand: String) of object;
  TIdIRCOnNicksInUse = procedure (Sender: TObject; var ANick: String) of object;
  TIdIRCOnSocketError = procedure (Sender: TObject; ASocket, AMsg: String) of object;
  TIdIRCOnNoTopic = procedure (Sender: TObject; AChannel: TIdIRCChannel; AContent: String) of object;
  TIdIRCOnAwayChange = procedure (Sender: TObject; AContent: String) of object;
  TIdIRCOnNickChanged = procedure (Sender: TObject; AOldNick: String) of object;
  TIdIRCOnDCCChat = procedure(Sender: TObject; ANick, AIp, APort: String) of object;
  TIdIRCOnDCCSend = procedure(Sender: TObject; ANick, AIp, APort, AFileName, AFileSize: String) of object;
  TIdIRCOnDCCResume = procedure(Sender: TObject; ANick, APort, AFileName, APosition: String) of object;
  TIdIRCOnDCCAccept = procedure(Sender: TObject; ANick, APort, AFileName, APosition: String) of object;
  TIdIRCOnLinks = procedure(Sender: TObject; AMask, AServer, AHopCount, AServerInfo: String) of object;
  TIdIRCOnList = procedure(Sender: TObject; AChans: TStringList; APosition: Integer; ALast: Boolean) of object;
//  TIdIRCOnChannelMode = procedure (Sender: TObject; Nick, Address, Channel: String) of object;

  TIdIRC = class(TIdTCPClient)
  protected
    { Property fields }
    FNick: String;
    FAltNick: String;
    FUsername: String;
    FRealName: String;
    FServer: String;
    //FPort: Integer;
    FPassword: String;
    FUserMode: TIdIRCUserModes;
    FAway: Boolean;
    FNotify: TStringList;
    FReplies: TIdIRCReplies;
    FState: TIdIRCState;
    FCurrentNick: String;
    FData: TObject;
    { Event handlers }
    FOnMessage: TIdIRCOnMessage;
    FOnNotice: TIdIRCOnMessage;
    FOnAction: TIdIRCOnMessage;
    FOnConnect: TNotifyEvent;
    FOnDisconnect: TNotifyEvent;
    FOnJoin: TIdIRCOnJoin;
    FOnJoined: TIdIRCOnJoined;
    FOnPart: TIdIRCOnPart;
    FOnParted: TIdIRCOnParted;
    FOnKick: TIdIRCOnKick;
    FOnKicked: TIdIRCOnKicked;
    FOnNickChange: TIdIRCOnNickChange;
    FOnNickChanged: TIdIRCOnNickChanged;
    FOnTopic: TIdIRCOnTopic;
    FOnQuit: TIdIRCOnQuit;
    FOnNames: TIdIRCOnNames;
    FOnInvite: TIdIRCOnInvite;
    FOnPingPong: TNotifyEvent;
    FOnError: TIdIRCOnError;
    FOnAway: TIdIRCOnAway;
    FOnNowAway: TIdIRCOnAwayChange;
    FOnUnAway: TIdIRCOnAwayChange;
    FOnWallops: TIdIRCOnWallops;
    FOnSystem: TIdIRCOnSystem;
    FOnRaw: TIdIRCOnRaw;
    FOnOp: TIdIRCOnOp;
    FOnDeop: TIdIRCOnOp;
    FOnBan: TIdIRCOnBan;
    FOnUnban: TIdIRCOnBan;
    FOnVoice: TIdIRCOnOp;
    FOnDevoice: TIdIRCOnOp;
    FOnChannelMode: TIdIRCOnChannelMode;
    FOnChannelModeChanged: TIdIRCOnChannelModeChanged;
    FOnUserMode: TIdIRCOnUserMode;
    FOnUserModeChanged: TNotifyEvent;
    FOnInviting: TIdIRCOnInviting;
    FOnKill: TIdIRCOnKill;
    FOnUnknownCommand: TIdIRCOnUnknownCommand;
    FOnCTCPQuery: TIdIRCOnCTCPQuery;
    FOnCTCPReply: TIdIRCOnCTCPReply;
    FOnStateChange: TNotifyEvent;
    FOnSend: TIdIRCOnSend;
    FOnReceive: TIdIRCOnSend;
    FOnNicksInUse: TIdIRCOnNicksInUse;
    FOnSocketError: TIdIRCOnSocketError;
    FOnNoTopic: TIdIRCOnNoTopic;
    FOnDCCChat: TIdIRCOnDCCChat;
    FOnDCCSend: TIdIRCOnDCCSend;
    FOnDCCResume: TIdIRCOnDCCResume;
    FOnDCCAccept: TIdIRCOnDCCAccept;
    FOnLinks: TIdIRCOnLinks;
    FOnList: TIdIRCOnList;
//    FOnChannelMode: TIdIRCOnChannelMode;
    FOnChannelUpdate: TIdIRCOnChannelUpdate;
    { Other fields }
    FList: TStringList;
    FListLast: Integer;
    Token: TStringList;
    FullCommand: String;
    SenderNick: String;
    SenderAddress: String;
    Command: String;
    Content: String;
    FChannels: TIdIRCChannels;
    FUsers: TIdIRCUsers;
    FUser: TIdIRCUser;
    FIRCThread: TIdIRCReadThread;
    { Socket }
    FBuffer: String;
    { Socket event handlers }
    procedure SocketDataAvailable;
    //procedure SocketSessionClosed(Sender: TObject);
    //procedure SocketSessionConnected(Sender: TObject);
    { Property methods }
    procedure SetNick(AValue: String);
    function GetNick: String;
    procedure SetAltNick(AValue: String);
    procedure SeTIdIRCUsername(AValue: String);
    procedure SetRealName(AValue: String);
    procedure SetPassword(AValue: String);
    procedure SeTIdIRCUserMode(AValue: TIdIRCUserModes);
    procedure SeTIdIRCReplies(AValue: TIdIRCReplies);
    //procedure SetServer(Value: String);
    //procedure SetPort(Value: Integer);
    //function GetConnected: Boolean;
    //function GetLocalHost: String;
    //function GetLocalIPAddr: String;
    //procedure SetSocksServer(Value: String);
    //procedure SetSocksPort(Value: String);
    { Other methods }
    procedure SeTIdIRCState(AState: TIdIRCState);
    procedure TokenizeCommand;
    function MatchCommand: Integer;
    procedure ParseCommand;
    function MatchDCC(ADCC: String): Integer;
    function MatchCTCP(ACTCP: String): Integer;
    procedure ParseDCC(ADCC: String);
    procedure ParseCTCPQuery;
    procedure ParseCTCPReply;
    function ParseChannelModeChange(AChannelToken: Integer): Boolean;
    function ParseUserModeChange: Boolean;
  public

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Loaded; override;
    procedure Connect(const ATimeout: Integer = IdTimeoutDefault); override;
    procedure Disconnect(AForce: Boolean); reintroduce; overload;
    function IsChannel(AChannel: String): Boolean;
    function IsOp(ANick: String): Boolean;
    function IsVoice(ANick: String): Boolean;
    function MatchHostmask(AAddress, AHostmask: PChar): Boolean;
    procedure Raw(ALine: String);
    procedure Say(ATarget, AMsg: String);
    procedure Notice(ATarget, AMsg: String);
    procedure Action(ATarget, AMsg: String);
    procedure CTCPQuery(ATarget, ACommand, AParameters: String);
    procedure CTCPReply(ATarget, ACTCP, AReply: String);
    procedure Join(AChannels : String; const AKeys: String ='');    {Do not Localize}
    procedure Part(AChannels : String; const AReason: String = '');    {Do not Localize}
    procedure Kick(AChannel, ANick, AReason: String);
    procedure Quit(AReason: String);
    procedure Mode(AChannel, AModes : String; const AParams: String = '');    {Do not Localize}
    procedure GetTopic(AChannel: String);
    procedure SetTopic(AChannel, ATopic: String);
    procedure SetAwayMessage(AMsg: String);
    procedure ClearAwayMessage;
    function GetModeString: String;
    { Public properties }
    //property Connected: Boolean read GetConnected;
    property Away: Boolean read FAway;
    property Notify: TStringList read FNotify write FNotify;
    property State: TIdIRCState read FState;
    property Channels: TIdIRCChannels read FChannels;
    property Users: TIdIRCUsers read FUsers;

    property IRCThread: TIdIRCReadThread read FIRCThread;
    //property LocalHost: String read GetLocalHost;
    //property LocalIPAddr: String read GetLocalIPAddr;
    //property Data: TObject read FData write FData;
  published
    { Published properties }
    property Nick: String read GetNick write SetNick;
    property AltNick: String read FAltNick write SetAltNick;
    property Username: String read FUsername write SeTIdIRCUsername;
    property RealName: String read FRealName write SetRealName;
    //property Server: String read FServer write SetServer;
    //property Port: Integer read FPort write SetPort;
    property Port default IdPORT_IRC;
    property Password: String read FPassword write SetPassword;
    property Replies: TIdIRCReplies read FReplies write SeTIdIRCReplies;
    property UserMode: TIdIRCUserModes read FUserMode write SeTIdIRCUserMode;
    //property SocksServer: String read FSocksServer write SetSocksServer;
    //property SocksPort: String read FSocksPort write SetSocksPort;
    { Published events }
    property OnMessage: TIdIRCOnMessage read FOnMessage write FOnMessage;
    property OnNotice: TIdIRCOnMessage read FOnNotice write FOnNotice;
    property OnAction: TIdIRCOnMessage read FOnAction write FOnAction;
    property OnConnect: TNotifyEvent read FOnConnect write FOnConnect;
    property OnDisconnect: TNotifyEvent read FOnDisconnect write FOnDisconnect;
    property OnJoin: TIdIRCOnJoin read FOnJoin write FOnJoin;
    property OnJoined: TIdIRCOnJoined read FOnJoined write FOnJoined;
    property OnPart: TIdIRCOnPart read FOnPart write FOnPart;
    property OnParted: TIdIRCOnParted read FOnParted write FOnParted;
    property OnKick: TIdIRCOnKick read FOnKick write FOnKick;
    property OnKicked: TIdIRCOnKicked read FOnKicked write FOnKicked;
    property OnNickChange: TIdIRCOnNickChange read FOnNickChange write FOnNickChange;
    property OnNickChanged: TIdIRCOnNickChanged read FOnNickChanged write FOnNickChanged;
    property OnTopic: TIdIRCOnTopic read FOnTopic write FOnTopic;
    property OnQuit: TIdIRCOnQuit read FOnQuit write FOnQuit;
    property OnNames: TIdIRCOnNames read FOnNames write FOnNames;
    property OnInvite: TIdIRCOnInvite read FOnInvite write FOnInvite;
    property OnPingPong: TNotifyEvent read FOnPingPong write FOnPingPong;
    property OnError: TIdIRCOnError read FOnError write FOnError;
    property OnAway: TIdIRCOnAway read FOnAway write FOnAway;
    property OnNowAway: TIdIRCOnAwayChange read FOnNowAway write FOnNowAway;
    property OnUnAway: TIdIRCOnAwayChange read FOnUnAway write FOnUnAway;
    property OnWallops: TIdIRCOnWallops read FOnWallops write FOnWallops;
    property OnSystem: TIdIRCOnSystem read FOnSystem write FOnSystem;
    property OnRaw: TIdIRCOnRaw read FOnRaw write FOnRaw;
    property OnOp: TIdIRCOnOp read FOnOp write FOnOp;
    property OnDeop: TIdIRCOnOp read FOnDeop write FOnDeop;
    property OnBan: TIdIRCOnBan read FOnBan write FOnBan;
    property OnUnban: TIdIRCOnBan read FOnUnban write FOnUnban;
    property OnVoice: TIdIRCOnOp read FOnVoice write FOnVoice;
    property OnDevoice: TIdIRCOnOp read FOnDevoice write FOnDevoice;
    property OnChannelMode: TIdIRCOnChannelMode read FOnChannelMode write FOnChannelMode;
    property OnChannelModeChanged: TIdIRCOnChannelModeChanged read FOnChannelModeChanged write FOnChannelModeChanged;
    property OnUserMode: TIdIRCOnUserMode read FOnUserMode write FOnUserMode;
    property OnUserModeChanged: TNotifyEvent read FOnUserModeChanged write FOnUserModeChanged;
    property OnInviting: TIdIRCOnInviting read FOnInviting write FOnInviting;
    property OnKill: TIdIRCOnKill read FOnKill write FOnKill;
    property OnUnknownCommand: TIdIRCOnUnknownCommand read FOnUnknownCommand write FOnUnknownCommand;
    property OnCTCPQuery: TIdIRCOnCTCPQuery read FOnCTCPQuery write FOnCTCPQuery;
    property OnCTCPReply: TIdIRCOnCTCPReply read FOnCTCPReply write FOnCTCPReply;
    property OnStateChange: TNotifyEvent read FOnStateChange write FOnStateChange;
    property OnSend: TIdIRCOnSend read FOnSend write FOnSend;
    property OnReceive: TIdIRCOnSend read FOnReceive write FOnReceive;
    property OnNicksInUse: TIdIRCOnNicksInUse read FOnNicksInUse write FOnNicksInUse;
    property OnSocketError: TIdIRCOnSocketError read FOnSocketError write FOnSocketError;
    property OnNoTopic: TIdIRCOnNoTopic read FOnNoTopic write FOnNoTopic;
    property OnDCCChat: TIdIRCOnDCCChat read FOnDCCChat write FOnDCCChat;
    property OnDCCSend: TIdIRCOnDCCSend read FOnDCCSend write FOnDCCSend;
    property OnDCCResume: TIdIRCOnDCCResume read FOnDCCResume write FOnDCCResume;
    property OnDCCAccept: TIdIRCOnDCCAccept read FOnDCCAccept write FOnDCCAccept;
    property OnLinks: TIdIRCOnLinks read FOnLinks write FOnLinks;
    property OnList: TIdIRCOnList read FOnList write FOnList;
//    property OnChannelMode: TIdIRCOnChannelMode read FOnChannelMode write FOnChannelMode;
    property OnChannelUpdate: TIdIRCOnChannelUpdate read FOnChannelUpdate write FOnChannelUpdate;
  End;//TIdIRC

const
  { RFC1459 specifies 15 as the maximum token count in any one line. }
  { I changed this to 30, becuase 15 causes problems on servers that don't stick to RFC  - MRE - 4/16/02}
  IdIrcMinTokenCount: Byte = 30;

implementation

⌨️ 快捷键说明

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