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 FGetHeader : TThreadItemOnGetHeader;
28 FGetFooter : TThreadItemOnGetFooter;
29 FGetBoardURL : TThreadItemOnGetBoardURL;
31 FCreateBoardItem : TBoardItemCreate;
32 FDisposeBoardItem : TBoardItemDispose;
33 FDownloadBoard : TBoardItemOnDownload;
34 FCreateThread : TBoardItemOnCreateThread;
35 FEnumThread : TBoardItemOnEnumThread;
36 FFileName2ThreadURL : TBoardItemOnFileName2ThreadURL;
39 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
41 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
42 constructor CreateFromPath( inPath : string );
43 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
44 constructor CreateFromName( inName : string );
45 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
46 constructor CreateFromModule( inModule : HMODULE );
48 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
49 procedure LoadFromPath( inPath : string );
50 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
51 procedure LoadFromName( inName : string );
52 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
53 procedure LoadFromModule( inModule : HMODULE );
55 //===== PlugInMain
\8aÖ
\98A
56 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
57 procedure VersionInfo( var outAgent : string;
58 var outMajor : DWORD; var outMinor : DWORD;
59 var outRelease : string; var outRevision : DWORD );
60 //
\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©
61 function AcceptURL( inURL : string ) : Boolean;
63 //===== TThreadItem
\8aÖ
\98A
64 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
65 procedure CreateThreadItem( threadItem : DWORD );
66 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
67 procedure DisposeThreadItem( threadItem : DWORD );
68 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
69 function DownloadThread( threadItem : DWORD ) : TDownloadState;
70 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
71 function WriteThread( threadItem : DWORD; inName : string; inMail : string; inMessage : string ) : TDownloadState;
72 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
73 function GetRes( threadItem : DWORD; inNo : DWORD ) : string;
74 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
75 function GetHeader( threadItem : DWORD; inOptionalHeader : string ) : string;
76 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
77 function GetFooter( threadItem : DWORD; inOptionalFooter : string ) : string;
78 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
79 function GetBoardURL( threadItem : DWORD ) : string;
81 //===== TBoardItem
\8aÖ
\98A
82 // TBoard
\82ª
\90¶
\90¬
\82³
\82ê
\82½
83 procedure CreateBoardItem( boardItem : DWORD );
84 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
85 procedure DisposeBoardItem( boardItem : DWORD );
86 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
87 function DownloadBoard( boardItem : DWORD ) : TDownloadState;
88 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
89 function CreateThread( boardItem : DWORD; inSubject : string; inName : string; inMail : string; inMessage : string ) : TDownloadState;
90 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
91 procedure EnumThread( boardItem : DWORD; inCallBack : TBoardItemEnumThreadCallBack );
92 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
93 function FileName2ThreadURL( boardItem : DWORD; inFileName : string ) : string;
96 procedure LoadPlugInAPI;
99 property FilePath : string read FFilePath;
100 property Module : HMODULE read FModule;
105 OnWorkBegin : TWorkBeginEvent;
106 OnWorkEnd : TWorkEndEvent;
108 BoardPlugIns : array of TBoardPlugIn;
110 procedure InitializeBoardPlugIns;
116 // *************************************************************************
117 // BoardPlugin
\83t
\83H
\83\8b\83_
\82É
\82 \82é
\83v
\83\89\83O
\83C
\83\93\82ð
\91S
\82Ä
\83\8d\81[
\83h
118 // *************************************************************************
119 procedure InitializeBoardPlugIns;
122 pluginNames : TStringList;
125 pluginNames := TStringList.Create;
127 GikoSys.GetFileList( GikoSys.Setting.GetBoardPlugInDir, '*', pluginNames, False, False );
128 SetLength( BoardPlugIns, pluginNames.Count );
130 bound := pluginNames.Count - 1;
131 for i := 0 to bound do
132 BoardPlugIns[ i ] := TBoardPlugIn.CreateFromName( pluginNames.Strings[ i ] );
141 // =========================================================================
142 //
\83v
\83\89\83O
\83C
\83\93\82ð
\8aÇ
\97\9d\82·
\82é TBoardPlugin
\83N
\83\89\83X
143 // =========================================================================
145 // *************************************************************************
146 //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
147 // *************************************************************************
148 constructor TBoardPlugIn.Create;
156 FCreateThreadItem := nil;
157 FDisposeThreadItem := nil;
158 FDownloadThread := nil;
164 FCreateBoardItem := nil;
165 FDisposeBoardItem := nil;
166 FDownloadBoard := nil;
167 FCreateThread := nil;
169 FFileName2ThreadURL := nil;
173 // *************************************************************************
174 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
175 // *************************************************************************
176 constructor TBoardPlugIn.CreateFromPath(
183 LoadFromPath( inPath );
187 // *************************************************************************
188 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
189 // *************************************************************************
190 constructor TBoardPlugIn.CreateFromName(
197 LoadFromName( inName );
201 // *************************************************************************
202 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\8dì
\90¬
203 // *************************************************************************
204 constructor TBoardPlugIn.CreateFromModule(
211 LoadFromModule( inModule );
215 // *************************************************************************
216 //
\83v
\83\89\83O
\83C
\83\93\82Ì
\83p
\83X
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
217 // *************************************************************************
218 procedure TBoardPlugIn.LoadFromPath(
224 if FileExists( inPath ) then
225 FModule := LoadLibrary( PChar( inPath ) )
226 else if FileExists( inPath + '.dll' ) then
227 FModule := LoadLibrary( PChar( inPath + '.dll' ) );
233 // *************************************************************************
234 //
\83v
\83\89\83O
\83C
\83\93\96¼
\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
235 // *************************************************************************
236 procedure TBoardPlugIn.LoadFromName(
241 LoadFromPath( GikoSys.Setting.GetBoardPlugInDir + inName );
245 // *************************************************************************
246 //
\83\82\83W
\83\85\81[
\83\8b\83n
\83\93\83h
\83\8b\82ð
\8ew
\92è
\82µ
\82Ä
\83\8d\81[
\83h
247 // *************************************************************************
248 procedure TBoardPlugIn.LoadFromModule(
252 tmp : array [0..MAX_PATH] of Char;
255 GetModuleFileName( inModule, tmp, SizeOf( tmp ) );
263 // *************************************************************************
264 //
\83o
\81[
\83W
\83\87\83\93\8fî
\95ñ
265 // *************************************************************************
266 procedure TBoardPlugIn.VersionInfo(
267 var outAgent : string; //
\83o
\81[
\83W
\83\87\83\93\82ð
\88ê
\90Ø
\8aÜ
\82Ü
\82È
\82¢
\8f\83\90\88\82È
\96¼
\8fÌ
268 var outMajor : DWORD; //
\83\81\83W
\83\83\81[
\83o
\81[
\83W
\83\87\83\93
269 var outMinor : DWORD; //
\83}
\83C
\83i
\81[
\83o
\81[
\83W
\83\87\83\93
270 var outRelease : string; //
\83\8a\83\8a\81[
\83X
\92i
\8aK
\96¼
271 var outRevision : DWORD //
\83\8a\83r
\83W
\83\87\83\93\83i
\83\93\83o
\81[
278 if Assigned( FVersionInfo ) then begin
279 FVersionInfo( agent, outMajor, outMinor, release, outRevision );
280 outAgent := string( agent );
281 outRelease := string( release );
282 DisposeResultString( agent );
283 DisposeResultString( release );
288 // *************************************************************************
289 //
\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©
290 // *************************************************************************
291 function TBoardPlugIn.AcceptURL(
296 if Assigned( FAcceptURL ) then
297 Result := FAcceptURL( PChar( inURL ) )
303 // *************************************************************************
304 // TThreadItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
305 // *************************************************************************
306 procedure TBoardPlugIn.CreateThreadItem(
307 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
311 if Assigned( FCreateThreadItem ) then
312 FCreateThreadItem( threadItem );
316 // *************************************************************************
317 // TThreadItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
318 // *************************************************************************
319 procedure TBoardPlugIn.DisposeThreadItem(
320 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
324 if Assigned( FDisposeThreadItem ) then
325 FDisposeThreadItem( threadItem );
329 // *************************************************************************
330 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
331 // *************************************************************************
332 function TBoardPlugIn.DownloadThread(
333 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
337 if Assigned( FDownloadThread ) then
338 Result := FDownloadThread( threadItem )
344 // *************************************************************************
345 //
\8f\91\82«
\8d\9e\82Ý
\82ð
\8ew
\8e¦
346 // *************************************************************************
347 function TBoardPlugIn.WriteThread(
348 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
349 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
350 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
351 inMessage : string //
\96{
\95¶
352 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
355 if Assigned( FWriteThread ) then
356 Result := FWriteThread( threadItem, PChar( inName ), PChar( inMail ), PChar( inMessage ) )
362 // *************************************************************************
363 //
\83\8c\83X
\94Ô
\8d\86 n
\82É
\91Î
\82·
\82é html
\82ð
\97v
\8b\81
364 // *************************************************************************
365 function TBoardPlugIn.GetRes(
366 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
367 inNo : DWORD //
\95\
\8e¦
\82·
\82é
\83\8c\83X
\94Ô
\8d\86
368 ) : string; //
\95\
\8e¦
\82·
\82é HTML
373 if Assigned( FGetRes ) then begin
374 tmp := FGetRes( threadItem, inNo );
375 Result := string( tmp );
376 DisposeResultString( tmp );
381 // *************************************************************************
382 //
\83X
\83\8c\83b
\83h
\82Ì
\83w
\83b
\83_ html
\82ð
\97v
\8b\81
383 // *************************************************************************
384 function TBoardPlugIn.GetHeader(
385 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
386 inOptionalHeader : string //
\92Ç
\89Á
\82Ì
\83w
\83b
\83_
387 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
392 if Assigned( FGetHeader ) then begin
393 tmp := FGetHeader( threadItem, PChar( inOptionalHeader ) );
394 Result := string( tmp );
395 DisposeResultString( tmp );
400 // *************************************************************************
401 //
\83X
\83\8c\83b
\83h
\82Ì
\83t
\83b
\83^ html
\82ð
\97v
\8b\81
402 // *************************************************************************
403 function TBoardPlugIn.GetFooter(
404 threadItem : DWORD; // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
405 inOptionalFooter : string //
\92Ç
\89Á
\82Ì
\83t
\83b
\83^
406 ) : string; //
\90®
\8c`
\82³
\82ê
\82½ HTML
411 if Assigned( FGetFooter ) then begin
412 tmp := FGetFooter( threadItem, PChar( inOptionalFooter ) );
413 Result := string( tmp );
414 DisposeResultString( tmp );
419 // *************************************************************************
420 //
\82±
\82Ì ThreadItem
\82ª
\91®
\82·
\82é
\94Â
\82Ì URL
\82ð
\97v
\8b\81
421 // *************************************************************************
422 function TBoardPlugIn.GetBoardURL(
423 threadItem : DWORD // ThreadItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
429 if Assigned( FGetBoardURL ) then begin
430 tmp := FGetBoardURL( threadItem );
431 Result := string( tmp );
432 DisposeResultString( tmp );
437 // *************************************************************************
438 // TBoardItem
\82ª
\90¶
\90¬
\82³
\82ê
\82½
439 // *************************************************************************
440 procedure TBoardPlugIn.CreateBoardItem(
441 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
445 if Assigned( FCreateBoardItem ) then
446 FCreateBoardItem( boardItem );
450 // *************************************************************************
451 // TBoardItem
\82ª
\94j
\8aü
\82³
\82ê
\82½
452 // *************************************************************************
453 procedure TBoardPlugIn.DisposeBoardItem(
454 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
458 if Assigned( FDisposeBoardItem ) then
459 FDisposeBoardItem( boardItem );
463 // *************************************************************************
464 //
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ew
\8e¦
465 // *************************************************************************
466 function TBoardPlugIn.DownloadBoard(
467 boardItem : DWORD // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
471 if Assigned( FDownloadBoard ) then
472 Result := FDownloadBoard( boardItem )
478 // *************************************************************************
479 //
\83X
\83\8c\97§
\82Ä
\82ð
\8ew
\8e¦
480 // *************************************************************************
481 function TBoardPlugIn.CreateThread(
482 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
483 inSubject : string; //
\83X
\83\8c\83^
\83C
484 inName : string; //
\96¼
\91O(
\83n
\83\93\83h
\83\8b)
485 inMail : string; //
\83\81\81[
\83\8b\83A
\83h
\83\8c\83X
486 inMessage : string //
\96{
\95¶
487 ) : TDownloadState; //
\8f\91\82«
\8d\9e\82Ý
\82ª
\90¬
\8c÷
\82µ
\82½
\82©
\82Ç
\82¤
\82©
490 if Assigned( FCreateThread ) then
491 Result := FCreateThread( boardItem, PChar( inSubject ), PChar( inName ), PChar( inMail ), PChar( inMessage ) )
497 // *************************************************************************
498 //
\82±
\82Ì
\94Â
\82É
\95Û
\97L
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82ð
\97ñ
\8b\93
499 // *************************************************************************
500 procedure TBoardPlugIn.EnumThread(
501 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
502 inCallBack : TBoardItemEnumThreadCallBack
506 if Assigned( FEnumThread ) then
507 FEnumThread( boardItem, inCallBack );
511 // *************************************************************************
512 //
\83t
\83@
\83C
\83\8b\96¼
\82©
\82ç
\83X
\83\8c\83b
\83h
\82Ì URL
\82ð
\97v
\8b\81
513 // *************************************************************************
514 function TBoardPlugIn.FileName2ThreadURL(
515 boardItem : DWORD; // BoardItem
\82Ì
\83C
\83\93\83X
\83^
\83\93\83X
522 if Assigned( FFileName2ThreadURL ) then begin
523 tmp := FFileName2ThreadURL( boardItem, PChar( inFileName ) );
524 Result := string( tmp );
525 DisposeResultString( tmp );
530 // *************************************************************************
531 //
\83v
\83\89\83O
\83C
\83\93\82Ì API
\82ð
\8eæ
\93¾
532 // *************************************************************************
533 procedure TBoardPlugIn.LoadPlugInAPI;
537 if Assigned( Pointer( FModule ) ) then begin
538 FVersionInfo := GetProcAddress( FModule, 'OnVersionInfo' );
539 FAcceptURL := GetProcAddress( FModule, 'OnAcceptURL' );
541 FCreateThreadItem := GetProcAddress( FModule, 'ThreadItemCreate' );
542 FDisposeThreadItem := GetProcAddress( FModule, 'ThreadItemDispose' );
543 FDownloadThread := GetProcAddress( FModule, 'ThreadItemOnDownload' );
544 FWriteThread := GetProcAddress( FModule, 'ThreadItemOnWrite' );
545 FGetRes := GetProcAddress( FModule, 'ThreadItemOnGetRes' );
546 FGetHeader := GetProcAddress( FModule, 'ThreadItemOnGetHeader' );
547 FGetFooter := GetProcAddress( FModule, 'ThreadItemOnGetFooter' );
548 FGetBoardURL := GetProcAddress( FModule, 'ThreadItemOnGetBoardURL' );
550 FCreateBoardItem := GetProcAddress( FModule, 'BoardItemCreate' );
551 FDisposeBoardItem := GetProcAddress( FModule, 'BoardItemDispose' );
552 FDownloadBoard := GetProcAddress( FModule, 'BoardItemOnDownload' );
553 FCreateThread := GetProcAddress( FModule, 'BoardItemOnCreateThread' );
554 FEnumThread := GetProcAddress( FModule, 'BoardItemOnEnumThread' );
555 FFileName2ThreadURL := GetProcAddress( FModule, 'BoardItemOnFileName2ThreadURL' );