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

📄 dxircservercore.pas

📁 Well known and usefull component for delphi 7
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit DXIRCServerCore;

interface

///////////////////////////////////////////////////////////////////////////////
//    Component: TDXIRCServerCore
//       Author: G.E. Ozz Nixon Jr. (staff@bpdx.com)
// ========================================================================
// Source Owner: DX, Inc. 1995-2003
//    Copyright: All code is the property of DX, Inc. Licensed for
//               resell by Brain Patchwork DX (tm) and part of the
//               DX (r) product lines, which are (c) 1999-2003
//               DX, Inc. Source may not be distributed without
//               written permission from both Brain Patchwork DX,
//               and DX, Inc.
//      License: (Reminder), None of this code can be added to other
//               developer products without permission. This includes
//               but not limited to DCU's, DCP's, DLL's, OCX's, or
//               any other form of merging our technologies. All of
//               your products released to a public consumer be it
//               shareware, freeware, commercial, etc. must contain a
//               license notification somewhere visible in the
//               application.
//               Example is Internet Explorer - Help->About screen
//               shows the licensed code contained in the application.
// Code Version: (4th Generation Code)
// ========================================================================
//  Description: implements IRC (Internet Relay Chat) protocol
// ========================================================================
///////////////////////////////////////////////////////////////////////////////

uses
  Classes,
  DXServerCore;

{$I DXSock.def}

Const
   MaxStatusCodes=45;
   ERR_NOSUCHNICK=401;
   ERR_NOSUCHSERVER=402;
   ERR_NOSUCHCHANNEL=403;
   ERR_CANNOTSENDTOCHAN=404;
   ERR_TOOMANYCHANNELS=405;
   ERR_WASNOSUCHNICK=406;
   ERR_TOOMANYTARGETS=407;
   ERR_NOORIGIN=409;
   ERR_NORECIPIENT=411;
   ERR_NOTEXTTOSEND=412;
   ERR_NOTOPLEVEL=413;
   ERR_WILDTOPLEVEL=414;
   ERR_UNKNOWNCOMMAND=421;
   ERR_NOMOTD=422;
   ERR_NOADMININFO=423;
   ERR_FILEERROR=424;
   ERR_NONICKNAMEGIVEN=431;
   ERR_ERRONEUSNICKNAME=432;
   ERR_NICKNAMEINUSE=433;
   ERR_NICKCOLLISION=436;
   ERR_USERNOTINCHANNEL=441;
   ERR_NOTONCHANNEL=442;
   ERR_USERONCHANNEL=443;
   ERR_NOLOGIN=444;
   ERR_SUMMONDISABLED=445;
   ERR_USERSDISABLED=446;
   ERR_NOTREGISTERED=451;
   ERR_NEEDMOREPARAMS=461;
   ERR_ALREADYREGISTRED=462;
   ERR_NOPERMFORHOST=463;
   ERR_PASSWDMISMATCH=464;
   ERR_YOUREBANNEDCREEP=465;
   ERR_KEYSET=467;
   ERR_CHANNELISFULL=471;
   ERR_UNKNOWNMODE=472;
   ERR_INVITEONLYCHAN=473;
   ERR_BANNEDFROMCHAN=474;
   ERR_BADCHANNELKEY=475;
   ERR_BADCHANMASK=476;
   ERR_NOPRIVILEGES=481;
   ERR_CHANOPRIVSNEEDED=482;
   ERR_CANTKILLSERVER=483;
   ERR_NOOPERHOST=491;
   ERR_UMODEUNKNOWNFLAG=501;
   ERR_USERSDONTMATCH=502;
   StatusCodes:array[0..MaxStatusCodes-1] of record
      Code:Integer;
      Msg:string
   end =
   ((Code:ERR_NOSUCHNICK; Msg:' :No such nick/channel'),
    (Code:ERR_NOSUCHSERVER; Msg:' :No such server'),
    (Code:ERR_NOSUCHCHANNEL; Msg:' :No such channel'),
    (Code:ERR_CANNOTSENDTOCHAN; Msg:' :Cannot send to channel'),
    (Code:ERR_TOOMANYCHANNELS; Msg:' :You have joined too many channels'),
    (Code:ERR_WASNOSUCHNICK; Msg:' :There was no such nickname'),
    (Code:ERR_TOOMANYTARGETS; Msg:' :Duplicate recipients. No message delivered'),
    (Code:ERR_NOORIGIN; Msg:':No origin specified'),
    (Code:ERR_NORECIPIENT; Msg:':No recipient givin'),
    (Code:ERR_NOTEXTTOSEND; Msg:':No text to send'),
    (Code:ERR_NOTOPLEVEL; Msg:' :No toplevel domain specified'),
    (Code:ERR_WILDTOPLEVEL; Msg:' :Wildcard in toplevel domain'),
    (Code:ERR_UNKNOWNCOMMAND; Msg:' :Unknown command'),
    (Code:ERR_NOMOTD; Msg:':MOTD file is missing'),
    (Code:ERR_NOADMININFO; Msg:' :No administrative info available'),
    (Code:ERR_FILEERROR; Msg:':File error doing requested operation'),
    (Code:ERR_NONICKNAMEGIVEN; Msg:':No nickname given'),
    (Code:ERR_ERRONEUSNICKNAME; Msg:' :Erroneus nickname'),
    (Code:ERR_NICKNAMEINUSE; Msg:' :Nickname is already in use'),
    (Code:ERR_NICKCOLLISION; Msg:' :Nickname collision KILL'),
    (Code:ERR_USERNOTINCHANNEL; Msg:' :They are not on that channel'),
    (Code:ERR_NOTONCHANNEL; Msg:' :You are not on that channel'),
    (Code:ERR_USERONCHANNEL; Msg:' :is already on channel'),
    (Code:ERR_NOLOGIN; Msg:' :User not logged in'),
    (Code:ERR_SUMMONDISABLED; Msg:':SUMMON has been disabled'),
    (Code:ERR_USERSDISABLED; Msg:':USERS has been disabled'),
    (Code:ERR_NOTREGISTERED; Msg:':You have not registered'),
    (Code:ERR_NEEDMOREPARAMS; Msg:' :Not enough parameters'),
    (Code:ERR_ALREADYREGISTRED; Msg:':You may not reregister'),
    (Code:ERR_NOPERMFORHOST; Msg:':Your host is not among the privileged'),
    (Code:ERR_PASSWDMISMATCH; Msg:':Password incorrect'),
    (Code:ERR_YOUREBANNEDCREEP; Msg:':You are banned from this server'),
    (Code:ERR_KEYSET; Msg:' :Channel key already set'),
    (Code:ERR_CHANNELISFULL; Msg:' :Cannot join channel (+l)'),
    (Code:ERR_UNKNOWNMODE; Msg:' :is unknown mode char to me'),
    (Code:ERR_INVITEONLYCHAN; Msg:' :Cannot join channel (+i)'),
    (Code:ERR_BANNEDFROMCHAN; Msg:' :Cannot join channel (+b)'),
    (Code:ERR_BADCHANNELKEY; Msg:' :Cannot join channel (+k)'),
    (Code:ERR_BADCHANMASK; Msg:' :Bad Channel Name or Mask'),
    (Code:ERR_NOPRIVILEGES; Msg:':Permission Denied- You are not an IRC operator'),
    (Code:ERR_CHANOPRIVSNEEDED; Msg:' :You are not channel operator'),
    (Code:ERR_CANTKILLSERVER; Msg:':You cannot kill a server!'),
    (Code:ERR_NOOPERHOST; Msg:':No O-lines for your host'),
    (Code:ERR_UMODEUNKNOWNFLAG; Msg:':Unknown MODE flag'),
    (Code:ERR_USERSDONTMATCH; Msg:':Cannot change mode for other users')
    );


Type
  IRCTBasicEvent = procedure(ClientThread:TDXClientThread;Parm1:string) of object;
  IRCTMultipleEvent = procedure(ClientThread:TDXClientThread;Parm1:string) of object;
  IRCTComplexEvent = procedure(ClientThread:TDXClientThread;Parm1,Parm2:string) of object;
  IRCTSimpleEvent = procedure(ClientThread:TDXClientThread) of object;
  IRCTOtherEvent = procedure(ClientThread:TDXClientThread;Command,Parms:String;var Handled:Boolean) of object;

  TDXIRCServerCore = class(TDXServerCore)
  private
    fOnCommandPASS:IRCTBasicEvent;      // PASS <password>}
    fOnCommandNICK:IRCTMultipleEvent;   // NICK <nickname> [hopcount] (hopcount is from server to server)}
    fOnCommandUSER:IRCTMultipleEvent;   // USER <username> <hostname> <servername> <realname>}
    fOnCommandSERVER:IRCTMultipleEvent; // SERVER <servername> <hopcount> <info>}
    fOnCommandOPER:IRCTComplexEvent;    // OPER <user> <password>}
    fOnCommandQUIT:IRCTBasicEvent;      // QUIT [quit message]}
    fOnCommandSQUIT:IRCTComplexEvent;   // SQUIT <server> <comment>}
    // Channel Commands
    fOnCommandJOIN:IRCTMultipleEvent;   // JOIN <channel>[,<channel>...] [<key>[,<key>]]}
    fOnCommandPART:IRCTBasicEvent;      // PART <channel>[,<channel>...]}
    fOnCommandMODE:IRCTMultipleEvent;   // MODE <channel> [[+|-]o|p|s|i|t|n|b|v] [<limits>] [<user>] [<ban mask>]}
                                        // MODE <nickname> [[+|-]i|w|s|o]}
    fOnCommandTOPIC:IRCTComplexEvent;   // TOPIC <channel> [<topic>]}
    fOnCommandNAMES:IRCTBasicEvent;     // NAMES [<channel>[,<channel>...]]}
    fOnCommandLIST:IRCTComplexEvent;    // LIST [<channel>[,<channel>...]] [<server>]}
    fOnCommandINVITE:IRCTComplexEvent;  // INVITE <nickname> <channel>}
    fOnCommandKICK:IRCTMultipleEvent;   // KICK <channel>[,<channel>...] <user>[,<user>...] [<comment>]}
    // Server Commands
    fOnCommandVERSION:IRCTBasicEvent;   // VERSION [<server>]}
    fOnCommandSTATS:IRCTComplexEvent;   // STATS [<query> [<server>]]}
    fOnCommandLINKS:IRCTComplexEvent;   // LINKS [[<remote server>] <server mask>]}
    fOnCommandTIME:IRCTBasicEvent;      // TIME [<server>]}
    fOnCommandCONNECT:IRCTMultipleEvent;// CONNECT <target server> [<port> [<remote server>]]}
    fOnCommandTRACE:IRCTBasicEvent;     // TRACE [<server>]}
    fOnCommandADMIN:IRCTBasicEvent;     // ADMIN [<server>]}
    fOnCommandINFO:IRCTBasicEvent;      // INFO [<server>]}
    // Messages
    fOnCommandPRIVMSG:IRCTComplexEvent; // PRIVMSG <receiver>[,<receiver>...] <text>}
    fOnCommandNOTICE:IRCTComplexEvent;  // NOTICE <nickname> <text>}
    // User Based Queries
    fOnCommandWHO:IRCTComplexEvent;     // WHO [<name> [<o>]]}
    fOnCommandWHOIS:IRCTComplexEvent;   // WHOIS [<server>] <nickname>[,<nickname>...]}
    fOnCommandWHOWAS:IRCTMultipleEvent; // WHOWAS <nickname> [<count> [<server>]]}
    // Miscellaneous
    fOnCommandKILL:IRCTComplexEvent;    // KILL <nickname> <comment>}
    fOnCommandPING:IRCTComplexEvent;    // PING <server1> [<server2>]}
    fOnCommandPONG:IRCTComplexEvent;    // PONG <daemon1> [<daemon2>]}
    fOnCommandAWAY:IRCTBasicEvent;      // AWAY [<message>]}
    fOnCommandREHASH:IRCTSimpleEvent;   // REHASH}
    fOnCommandRESTART:IRCTSimpleEvent;  // RESTART}
    fOnCommandSUMMON:IRCTComplexEvent;  // SUMMON <user> [<server>]}
    fOnCommandUSERS:IRCTBasicEvent;     // USERS [<server>]}
    fOnCommandWALLOPS:IRCTBasicEvent;   // WALLOPS <text>}
    fOnCommandUSERHOST:IRCTComplexEvent;// USERHOST <nickname> [<nickname>]}
    fOnCommandISON:IRCTComplexEvent;    // ISON <nickname> [<nickname>]}
    fOnCommandERROR:IRCTMultipleEvent;  // ERROR <message> from server to server
    fOnCommandOther:IRCTOtherEvent;
    fOnCommandTimeout:IRCTSimpleEvent;  // server should send PING
    // new as of 3.0a:
    fServerName:String;
  protected
    Procedure SetOnCommandPASS(Value:IRCTBasicEvent);
    Procedure SetOnCommandNICK(Value:IRCTMultipleEvent);
    Procedure SetOnCommandUSER(Value:IRCTMultipleEvent);
    Procedure SetOnCommandSERVER(Value:IRCTMultipleEvent);
    Procedure SetOnCommandOPER(Value:IRCTComplexEvent);
    Procedure SetOnCommandQUIT(Value:IRCTBasicEvent);
    Procedure SetOnCommandSQUIT(Value:IRCTComplexEvent);
    Procedure SetOnCommandJOIN(Value:IRCTMultipleEvent);
    Procedure SetOnCommandPART(Value:IRCTBasicEvent);
    Procedure SetOnCommandMODE(Value:IRCTMultipleEvent);
    Procedure SetOnCommandTOPIC(Value:IRCTComplexEvent);
    Procedure SetOnCommandNAMES(Value:IRCTBasicEvent);
    Procedure SetOnCommandLIST(Value:IRCTComplexEvent);
    Procedure SetOnCommandINVITE(Value:IRCTComplexEvent);
    Procedure SetOnCommandKICK(Value:IRCTMultipleEvent);
    Procedure SetOnCommandVERSION(Value:IRCTBasicEvent);
    Procedure SetOnCommandSTATS(Value:IRCTComplexEvent);
    Procedure SetOnCommandLINKS(Value:IRCTComplexEvent);
    Procedure SetOnCommandTIME(Value:IRCTBasicEvent);
    Procedure SetOnCommandCONNECT(Value:IRCTMultipleEvent);
    Procedure SetOnCommandTRACE(Value:IRCTBasicEvent);
    Procedure SetOnCommandADMIN(Value:IRCTBasicEvent);
    Procedure SetOnCommandINFO(Value:IRCTBasicEvent);
    Procedure SetOnCommandPRIVMSG(Value:IRCTComplexEvent);
    Procedure SetOnCommandNOTICE(Value:IRCTComplexEvent);
    Procedure SetOnCommandWHO(Value:IRCTComplexEvent);
    Procedure SetOnCommandWHOIS(Value:IRCTComplexEvent);
    Procedure SetOnCommandWHOWAS(Value:IRCTMultipleEvent);
    Procedure SetOnCommandKILL(Value:IRCTComplexEvent);
    Procedure SetOnCommandPING(Value:IRCTComplexEvent);
    Procedure SetOnCommandPONG(Value:IRCTComplexEvent);
    Procedure SetOnCommandAWAY(Value:IRCTBasicEvent);
    Procedure SetOnCommandREHASH(Value:IRCTSimpleEvent);
    Procedure SetOnCommandRESTART(Value:IRCTSimpleEvent);
    Procedure SetOnCommandSUMMON(Value:IRCTComplexEvent);
    Procedure SetOnCommandUSERS(Value:IRCTBasicEvent);
    Procedure SetOnCommandWALLOPS(Value:IRCTBasicEvent);
    Procedure SetOnCommandUSERHOST(Value:IRCTComplexEvent);
    Procedure SetOnCommandISON(Value:IRCTComplexEvent);
    Procedure SetOnCommandERROR(Value:IRCTMultipleEvent);
  public
    constructor Create(AOwner:TComponent); {$IFNDEF OBJECTS_ONLY} override; {$ENDIF}
    destructor Destroy; override;
    procedure ProcessSession(ClientThread:TDXClientThread);
    Procedure AddBasicEvent(Command:String;EventProc:IRCTBasicEvent);
    Procedure AddSimpleEvent(Command:String;EventProc:IRCTSimpleEvent);
    Procedure AddComplexEvent(Command:String;EventProc:IRCTComplexEvent);
    Procedure AddMultipleEvent(Command:String;EventProc:IRCTMultipleEvent);
    Procedure SayError(ErrorCode:Integer;OptionalText:String;ClientThread:TDXClientThread); // 3.0a
    Procedure SayWelcome(Nick:String;Text:TStrings;ClientThread:TDXClientThread); // 4.0
    Procedure SayMOTD(Nick:String;Text:TStrings;ClientThread:TDXClientThread); // 4.0
    Procedure SayNOTICE(Nick,Text:String;ClientThread:TDXClientThread); // 4.0
    Procedure SayChannelList(Nick:String;Text:TStrings;ClientThread:TDXClientThread); // 4.0
  published
    property OnCommandPASS: IRCTBasicEvent read fOnCommandPASS
                                           write SetOnCommandPASS;
    property OnCommandNICK: IRCTMultipleEvent read fOnCommandNICK
                                              write SetOnCommandNICK;
    property OnCommandUSER: IRCTMultipleEvent read fOnCommandUSER
                                              write SetOnCommandUSER;
    property OnCommandSERVER: IRCTMultipleEvent read fOnCommandSERVER
                                                write SetOnCommandSERVER;
    property OnCommandOPER: IRCTComplexEvent read fOnCommandOPER
                                             write SetOnCommandOPER;
    property OnCommandQUIT: IRCTBasicEvent read fOnCommandQUIT
                                           write SetOnCommandQUIT;
    property OnCommandSQUIT: IRCTComplexEvent read fOnCommandSQUIT
                                              write SetOnCommandSQUIT;
    property OnCommandJOIN: IRCTMultipleEvent read fOnCommandJOIN
                                              write SetOnCommandJOIN;
    property OnCommandPART: IRCTBasicEvent read fOnCommandPART
                                           write SetOnCommandPART;
    property OnCommandMODE: IRCTMultipleEvent read fOnCommandMODE
                                              write SetOnCommandMODE;
    property OnCommandTOPIC: IRCTComplexEvent read fOnCommandTOPIC
                                             write SetOnCommandTOPIC;
    property OnCommandNAMES: IRCTBasicEvent read fOnCommandNAMES
                                             write SetOnCommandNAMES;
    property OnCommandLIST: IRCTComplexEvent read fOnCommandLIST
                                             write SetOnCommandLIST;
    property OnCommandINVITE: IRCTComplexEvent read fOnCommandINVITE
                                               write SetOnCommandINVITE;
    property OnCommandKICK: IRCTMultipleEvent read fOnCommandKICK
                                              write SetOnCommandKICK;
    property OnCommandVERSION: IRCTBasicEvent read fOnCommandVERSION
                                              write SetOnCommandVERSION;
    property OnCommandSTATS: IRCTComplexEvent read fOnCommandSTATS
                                              write SetOnCommandSTATS;
    property OnCommandLINKS: IRCTComplexEvent read fOnCommandLINKS
                                              write SetOnCommandLINKS;
    property OnCommandTIME: IRCTBasicEvent read fOnCommandTIME
                                           write SetOnCommandTIME;
    property OnCommandCONNECT: IRCTMultipleEvent read fOnCommandCONNECT
                                                 write SetOnCommandCONNECT;
    property OnCommandTRACE: IRCTBasicEvent read fOnCommandTRACE
                                            write SetOnCommandTRACE;
    property OnCommandADMIN: IRCTBasicEvent read fOnCommandADMIN
                                            write SetOnCommandADMIN;
    property OnCommandINFO: IRCTBasicEvent read fOnCommandINFO
                                           write SetOnCommandINFO;
    property OnCommandPRIVMSG: IRCTComplexEvent read fOnCommandPRIVMSG
                                                write SetOnCommandPRIVMSG;
    property OnCommandNOTICE: IRCTComplexEvent read fOnCommandNOTICE
                                               write SetOnCommandNOTICE;
    property OnCommandWHO: IRCTComplexEvent read fOnCommandWHO
                                            write SetOnCommandWHO;
    property OnCommandWHOIS: IRCTComplexEvent read fOnCommandWHOIS
                                              write SetOnCommandWHOIS;
    property OnCommandWHOWAS: IRCTMultipleEvent read fOnCommandWHOWAS
                                                write SetOnCommandWHOWAS;
    property OnCommandKILL: IRCTComplexEvent read fOnCommandKILL
                                             write SetOnCommandKILL;
    property OnCommandPING: IRCTComplexEvent read fOnCommandPING
                                             write SetOnCommandPING;
    property OnCommandPONG: IRCTComplexEvent read fOnCommandPONG
                                             write SetOnCommandPONG;
    property OnCommandAWAY: IRCTBasicEvent read fOnCommandAWAY
                                           write SetOnCommandAWAY;
    property OnCommandREHASH: IRCTSimpleEvent read fOnCommandREHASH
                                              write SetOnCommandREHASH;
    property OnCommandRESTART: IRCTSimpleEvent read fOnCommandRESTART
                                               write SetOnCommandRESTART;
    property OnCommandSUMMON: IRCTComplexEvent read fOnCommandSUMMON
                                               write SetOnCommandSUMMON;
    property OnCommandUSERS: IRCTBasicEvent read fOnCommandUSERS
                                            write SetOnCommandUSERS;
    property OnCommandWALLOPS: IRCTBasicEvent read fOnCommandWALLOPS
                                              write SetOnCommandWALLOPS;
    property OnCommandUSERHOST: IRCTComplexEvent read fOnCommandUSERHOST
                                                 write SetOnCommandUSERHOST;
    property OnCommandISON: IRCTComplexEvent read fOnCommandISON
                                             write SetOnCommandISON;
    property OnCommandERROR: IRCTMultipleEvent read fOnCommandERROR
                                             write SetOnCommandERROR;
    property OnCommandOther: IRCTOtherEvent read fOnCommandOther
                                         write fOnCommandOther;
    property ServerName:String read fServerName

⌨️ 快捷键说明

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