1+ use std:: { sync:: Arc , thread:: sleep, time:: Duration } ;
2+ use actix_files as fs;
3+
4+ use actix_web:: { dev:: Server , middleware:: { self , Logger } , web, App , HttpServer } ;
5+ use log:: { error, info} ;
6+
7+ use crate :: { actix_middleware:: status_page, config:: ServerConfig , server:: server_trait:: WkServer , share:: { self , collection:: Collection } , utils} ;
8+
9+ use super :: config:: ServiceConfig ;
10+
11+ pub struct APIServer {
12+ pub config : ServerConfig < ServiceConfig > ,
13+ pub share : Arc < Collection > ,
14+ }
15+
16+ impl APIServer {
17+ pub fn new ( config : ServerConfig < ServiceConfig > , share : Arc < Collection > ) -> Self {
18+ Self {
19+ config : config,
20+ share : share,
21+ }
22+ }
23+
24+ pub fn create_server ( & self ) -> Result < Server , std:: io:: Error > {
25+ let path = match utils:: fs:: get_file_path ( & self . share . config . path ) {
26+ Ok ( p) => p. join ( self . share . config . api_server . service_config . path . clone ( ) ) ,
27+ Err ( e) => return Err ( std:: io:: Error :: new ( std:: io:: ErrorKind :: Other , e. to_string ( ) ) ) ,
28+ } ;
29+
30+ let server_name = self . server_name ( ) . to_string ( ) ;
31+ let path_clone = path. clone ( ) ;
32+ let share_clone = web:: Data :: new ( Arc :: clone ( & self . share ) ) ;
33+ let server = HttpServer :: new ( move || {
34+ let custom_logger = utils:: logger:: custom_actix_logger ( & server_name) ;
35+ App :: new ( )
36+ . app_data ( share_clone. clone ( ) )
37+ . wrap ( custom_logger)
38+ . wrap ( middleware:: ErrorHandlers :: new ( ) . default_handler ( status_page:: middleware:: Handler :: err_handler) )
39+ // 他のミドルウェアやデータをここに追加可能
40+ . service ( fs:: Files :: new ( "/" , path_clone. clone ( ) ) . index_file ( "index.html" ) )
41+ } )
42+ . bind ( self . config . server_bind . clone ( ) ) ?
43+ . workers ( self . config . server_workers )
44+ . backlog ( self . config . server_backlog )
45+ . run ( ) ;
46+
47+ Ok ( server)
48+ }
49+
50+ }
51+
52+ impl WkServer < ServiceConfig > for APIServer {
53+ fn config ( & self ) -> & ServerConfig < ServiceConfig > {
54+ & self . config
55+ }
56+
57+ fn create_server ( & self ) -> Result < Server , std:: io:: Error > {
58+ APIServer :: create_server ( self )
59+ }
60+
61+ fn server_name ( & self ) -> & str {
62+ "APIServer"
63+ }
64+
65+ fn failed_report ( & mut self , e : std:: io:: Error , failure_count : u32 , start_time : tokio:: time:: Instant ) {
66+
67+ }
68+
69+ }
0 commit comments