IdServerIOHandler.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. {
  2. $Project$
  3. $Workfile$
  4. $Revision$
  5. $DateUTC$
  6. $Id$
  7. This file is part of the Indy (Internet Direct) project, and is offered
  8. under the dual-licensing agreement described on the Indy website.
  9. (http://www.indyproject.org/)
  10. Copyright:
  11. (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved.
  12. }
  13. {
  14. $Log$
  15. }
  16. {
  17. Rev 1.7 2003.10.11 5:49:56 PM czhower
  18. -VCL fixes for servers
  19. -Chain suport for servers (Super core)
  20. -Scheduler upgrades
  21. -Full yarn support
  22. Rev 1.6 2003.09.19 11:54:32 AM czhower
  23. -Completed more features necessary for servers
  24. -Fixed some bugs
  25. Rev 1.5 2003.09.18 4:10:28 PM czhower
  26. Preliminary changes for Yarn support.
  27. Rev 1.4 3/23/2003 11:26:08 PM BGooijen
  28. Added SetScheduler,MakeClientIOHandler
  29. Rev 1.3 3/13/2003 10:18:22 AM BGooijen
  30. Server side fibers, bug fixes
  31. Rev 1.2 1-17-2003 22:22:02 BGooijen
  32. new design
  33. Rev 1.1 1-1-2003 16:28:58 BGooijen
  34. Changed TIdThread to TIdYarn
  35. Rev 1.0 11/13/2002 08:46:16 AM JPMugaas
  36. }
  37. unit IdServerIOHandler;
  38. interface
  39. {$i IdCompilerDefines.inc}
  40. uses
  41. Classes,
  42. IdSocketHandle, IdComponent, IdIOHandlerStack,
  43. IdIOHandler, IdThread, IdScheduler, IdYarn;
  44. type
  45. TIdServerIOHandler = class(TIdComponent)
  46. protected
  47. {$IFDEF USE_OBJECT_ARC}[Weak]{$ENDIF} FScheduler: TIdScheduler;
  48. {$IFNDEF USE_OBJECT_ARC}
  49. procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  50. {$ENDIF}
  51. public
  52. // This is a thread and not a yarn. Its the listener thread.
  53. function Accept(
  54. ASocket: TIdSocketHandle;
  55. AListenerThread: TIdThread;
  56. AYarn: TIdYarn
  57. ): TIdIOHandler;
  58. virtual;
  59. function MakeClientIOHandler(AYarn: TIdYarn): TIdIOHandler; virtual;
  60. // Init is called when the server goes active
  61. procedure Init; virtual;
  62. procedure Shutdown; virtual;
  63. // SetScheduler is called by the user (normally TCPServer) automatically
  64. procedure SetScheduler(AScheduler: TIdScheduler); virtual;
  65. end;
  66. implementation
  67. procedure TIdServerIOHandler.Init;
  68. begin
  69. end;
  70. function TIdServerIOHandler.Accept(
  71. ASocket: TIdSocketHandle;
  72. AListenerThread: TIdThread;
  73. AYarn: TIdYarn
  74. ): TIdIOHandler;
  75. begin
  76. Result := nil;
  77. end;
  78. function TIdServerIOHandler.MakeClientIOHandler(AYarn: TIdYarn): TIdIOHandler;
  79. begin
  80. Result := nil;
  81. end;
  82. // under ARC, all weak references to a freed object get nil'ed automatically
  83. {$IFNDEF USE_OBJECT_ARC}
  84. procedure TIdServerIOHandler.Notification(AComponent: TComponent; Operation: TOperation);
  85. begin
  86. // Remove the reference to the linked Scheduler if it is deleted
  87. if (Operation = opRemove) and (AComponent = FScheduler) then begin
  88. FScheduler := nil;
  89. end;
  90. inherited Notification(AComponent, Operation);
  91. end;
  92. {$ENDIF}
  93. procedure TIdServerIOHandler.SetScheduler(AScheduler: TIdScheduler);
  94. begin
  95. {$IFDEF USE_OBJECT_ARC}
  96. // under ARC, all weak references to a freed object get nil'ed automatically
  97. FScheduler := AScheduler;
  98. {$ELSE}
  99. if FScheduler <> AScheduler then begin
  100. // Remove self from the Scheduler's notification list
  101. if Assigned(FScheduler) then begin
  102. FScheduler.RemoveFreeNotification(Self);
  103. end;
  104. FScheduler := AScheduler;
  105. // Add self to the Scheduler's notification list
  106. if Assigned(FScheduler) then begin
  107. FScheduler.FreeNotification(Self);
  108. end;
  109. end;
  110. {$ENDIF}
  111. end;
  112. procedure TIdServerIOHandler.Shutdown;
  113. begin
  114. end;
  115. end.