1 unit ExternalBoardManager;
6 Windows, Classes, SysUtils,
7 IdHTTP, IdComponent, IdGlobal, IdException,
8 ExternalBoardPlugInMain, ExternalFilePath, ExternalThreadItem, ExternalBoardItem;
11 // =========================================================================
12 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
13 // =========================================================================
14 TBoardPlugIn = class( TObject )
16 FFilePath : string; //
\83v
\83\89\83O
\83C
\83\93\82ð
\8e¦
\82·
\83p
\83X
17 FModule : HMODULE; //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b
19 FVersionInfo : TOnVersionInfo;
20 FAcceptURL : TOnAcceptURL;
22 FCreateThreadItem : TThreadItemCreate;
23 FDisposeThreadItem : TThreadItemDispose;
24 FDownloadThread : TThreadItemOnDownload;
25 FWriteThread : TThreadItemOnWrite;
26 FGetRes : TThreadItemOnGetRes;
27 FGetDat : TThreadItemOnGetDat;
28 FGetHeader : TThreadItemOnGetHeader;
29 FGetFooter : TThreadItemOnGetFooter;
30 FGetBoardURL : TThreadItemOnGetBoardURL;
32 FCreateBoardItem : TBoardItemCreate;
33 FDisposeBoardItem : TBoardItemDispose;
34 FDownloadBoard : TBoardItemOnDownload;
35 FCreateThread : TBoardItemOnCreateThread;
36 FEnumThread : TBoardItemOnEnumThread;
37 FFileName2ThreadURL : TBoardItemOnFileName2ThreadURL;
40 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
42 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
43 constructor CreateFromPath( inPath : string );
44 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
45 constructor CreateFromName( inName : string );
46 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
47 constructor CreateFromModule( inModule : HMODULE );
48 //
\83f
\83X
\83g
\83\89\83N
\83^
49 destructor Destroy; override;
51 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
52 procedure LoadFromPath( inPath : string );
53 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
54 procedure LoadFromName( inName : string );
55 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
56 procedure LoadFromModule( inModule : HMODULE );
58 //===== PlugInMain
\8aÖ
\98A
59 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
60 procedure VersionInfo( var outAgent : string;
61 var outMajor : DWORD; var outMinor : DWORD;
62 var outRelease : string; var outRevision : DWORD );
63 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\82±
\82Ì
\83v
\83\89\83O
\83C
\83\93\82Å
\8eó
\82¯
\95t
\82¯
\82é
\82©
\82Ç
\82¤
\82©
64 function AcceptURL( inURL : string ) : TAcceptType;
66 //===== TThreadItem
\8aÖ
\98A
67 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
68 procedure CreateThreadItem( threadItem : DWORD );
69 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
70 procedure DisposeThreadItem( threadItem : DWORD );
71 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
72 function DownloadThread( threadItem : DWORD ) : TDownloadState;
73 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
74 function WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
75 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
76 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
77 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é Dat
\82ð
\97v
\8b\81
78 function GetDat( threadItem : DWORD; inNo : DWORD ) : string;
79 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
80 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
81 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
82 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
83 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
84 function GetBoardURL( threadItem : DWORD ) : string;
86 //===== TBoardItem
\8aÖ
\98A
87 // TBoard
\82ª
\90¶
\90¬
\82³
\82ê
\82½
88 procedure CreateBoardItem( boardItem : DWORD );
89 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
90 procedure DisposeBoardItem( boardItem : DWORD );
91 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
92 function DownloadBoard( boardItem : DWORD ) : TDownloadState;
93 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
94 function CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
95 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
96 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
97 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
98 function FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
101 procedure LoadPlugInAPI;
104 property FilePath : string read FFilePath;
105 property Module : HMODULE read FModule;
110 OnWorkBegin : TWorkBeginEvent;
111 OnWorkEnd : TWorkEndEvent;
113 BoardPlugIns : array of TBoardPlugIn;
115 procedure InitializeBoardPlugIns;
121 // *************************************************************************
122 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
123 // *************************************************************************
124 procedure InitializeBoardPlugIns;
127 pluginNames : TStringList;
130 pluginNames := TStringList.Create;
132 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
133 SetLength( BoardPlugIns, pluginNames.Count );
135 bound := pluginNames.Count - 1;
136 for i := 0 to bound do
137 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
146 // =========================================================================
147 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
148 // =========================================================================
150 // *************************************************************************
151 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
152 // *************************************************************************
153 constructor TBoardPlugIn.Create;
161 FCreateThreadItem := nil;
162 FDisposeThreadItem := nil;
163 FDownloadThread := nil;
170 FCreateBoardItem := nil;
171 FDisposeBoardItem := nil;
172 FDownloadBoard := nil;
173 FCreateThread := nil;
175 FFileName2ThreadURL := nil;
179 // *************************************************************************
180 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
181 // *************************************************************************
182 constructor TBoardPlugIn.CreateFromPath(
189 LoadFromPath( inPath );
193 // *************************************************************************
194 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
195 // *************************************************************************
196 constructor TBoardPlugIn.CreateFromName(
203 LoadFromName( inName );
207 // *************************************************************************
208 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
209 // *************************************************************************
210 constructor TBoardPlugIn.CreateFromModule(
217 LoadFromModule( inModule );
221 // *************************************************************************
222 //
\83f
\83X
\83g
\83\89\83N
\83^
223 // *************************************************************************
224 destructor TBoardPlugIn.Destroy;
227 FreeLibrary( FModule );
233 // *************************************************************************
234 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
235 // *************************************************************************
236 procedure TBoardPlugIn.LoadFromPath(
242 if FileExists( inPath ) then
243 FModule := LoadLibrary( PChar( inPath ) )
244 else if FileExists( inPath + '.dll' ) then
245 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
251 // *************************************************************************
252 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
253 // *************************************************************************
254 procedure TBoardPlugIn.LoadFromName(
259 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
263 // *************************************************************************
264 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
265 // *************************************************************************
266 procedure TBoardPlugIn.LoadFromModule(
270 tmp : array [0..MAX_PATH] of Char;
273 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
281 // *************************************************************************
282 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
283 // *************************************************************************
284 procedure TBoardPlugIn.VersionInfo(
285 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
286 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
287 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
288 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
289 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
296 if Assigned( FVersionInfo ) then begin
297 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
298 outAgent := string( agent );
299 outRelease := string( release );
300 DisposeResultString( agent );
301 DisposeResultString( release );
306 // *************************************************************************
307 //
\8ew
\92è
\82µ
\82½ URL
\82ð
\82±
\82Ì
\83v
\83\89\83O
\83C
\83\93\82Å
\8eó
\82¯
\95t
\82¯
\82é
\82©
\82Ç
\82¤
\82©
308 // *************************************************************************
309 function TBoardPlugIn.AcceptURL(
314 if Assigned( FAcceptURL ) then
315 Result := FAcceptURL( PChar( inURL ) )
317 Result := atNoAccept;
321 // *************************************************************************
322 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
323 // *************************************************************************
324 procedure TBoardPlugIn.CreateThreadItem(
325 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
329 if Assigned( FCreateThreadItem ) then
330 FCreateThreadItem( threadItem );
334 // *************************************************************************
335 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
336 // *************************************************************************
337 procedure TBoardPlugIn.DisposeThreadItem(
338 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
342 if Assigned( FDisposeThreadItem ) then
343 FDisposeThreadItem( threadItem );
347 // *************************************************************************
348 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
349 // *************************************************************************
350 function TBoardPlugIn.DownloadThread(
351 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
355 if Assigned( FDownloadThread ) then
356 Result := FDownloadThread( threadItem )
362 // *************************************************************************
363 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
364 // *************************************************************************
365 function TBoardPlugIn.WriteThread(
366 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
367 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
368 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
369 inMessage : string //
\96{
\95¶
370 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
373 if Assigned( FWriteThread ) then
374 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
380 // *************************************************************************
381 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
382 // *************************************************************************
383 function TBoardPlugIn.GetRes(
384 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
385 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
386 ) : string; //
\95\
\8e¦
\82·
\82é HTML
391 if Assigned( FGetRes ) then begin
392 tmp := FGetRes( threadItem, inNo );
394 Result := string( tmp );
396 DisposeResultString( tmp );
402 // *************************************************************************
403 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é Dat
\82ð
\97v
\8b\81
404 // *************************************************************************
405 function TBoardPlugIn.GetDat(
406 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
407 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
408 ) : string; //
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\82Ìdat
\8c`
\8e®
411 if Assigned( FGetDat ) then begin
412 Result := FGetDat( threadItem, inNo );
417 // *************************************************************************
418 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
419 // *************************************************************************
420 function TBoardPlugIn.GetHeader(
421 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
422 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
423 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
428 if Assigned( FGetHeader ) then begin
429 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
431 Result := string( tmp );
433 DisposeResultString( tmp );
439 // *************************************************************************
440 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
441 // *************************************************************************
442 function TBoardPlugIn.GetFooter(
443 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
444 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
445 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
450 if Assigned( FGetFooter ) then begin
451 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
452 Result := string( tmp );
453 DisposeResultString( tmp );
458 // *************************************************************************
459 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
460 // *************************************************************************
461 function TBoardPlugIn.GetBoardURL(
462 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
468 if Assigned( FGetBoardURL ) then begin
469 tmp := FGetBoardURL( threadItem );
470 Result := string( tmp );
471 DisposeResultString( tmp );
476 // *************************************************************************
477 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
478 // *************************************************************************
479 procedure TBoardPlugIn.CreateBoardItem(
480 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
484 if Assigned( FCreateBoardItem ) then
485 FCreateBoardItem( boardItem );
489 // *************************************************************************
490 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
491 // *************************************************************************
492 procedure TBoardPlugIn.DisposeBoardItem(
493 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
497 if Assigned( FDisposeBoardItem ) then
498 FDisposeBoardItem( boardItem );
502 // *************************************************************************
503 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
504 // *************************************************************************
505 function TBoardPlugIn.DownloadBoard(
506 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
510 if Assigned( FDownloadBoard ) then
511 Result := FDownloadBoard( boardItem )
517 // *************************************************************************
518 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
519 // *************************************************************************
520 function TBoardPlugIn.CreateThread(
521 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
522 inSubject : string; //
\83X
\83\8c\83^
\83C
523 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
524 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
525 inMessage : string //
\96{
\95¶
526 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
529 if Assigned( FCreateThread ) then
530 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
536 // *************************************************************************
537 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
538 // *************************************************************************
539 procedure TBoardPlugIn.EnumThread(
540 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
541 inCallBack : TBoardItemEnumThreadCallBack
545 if Assigned( FEnumThread ) then
546 FEnumThread( boardItem, inCallBack );
550 // *************************************************************************
551 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
552 // *************************************************************************
553 function TBoardPlugIn.FileName2ThreadURL(
554 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
561 if Assigned( FFileName2ThreadURL ) then begin
562 tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
563 Result := string( tmp );
564 DisposeResultString( tmp );
569 // *************************************************************************
570 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
571 // *************************************************************************
572 procedure TBoardPlugIn.LoadPlugInAPI;
576 if Assigned( Pointer( FModule ) ) then begin
577 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
578 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
580 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
581 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
582 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
583 FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' );
584 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
585 FGetDat := GetProcAddress( FModule, 'ThreadItemOnGetDat' );
586 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
587 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
588 FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
590 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
591 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
592 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
593 FCreateThread := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
594 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
595 FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );