
load "http_request.rb"
load "http_response.rb"
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# * HTTP Server类
#-------------------------------------------------------------------------------------------------------
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
class HTTPServer < FSServer
    
    # 所有客户端
    attr_reader :clients;
    
    
    
    def initialize(server_name)
        super(server_name);
        @start_proc = nil;
    end
    
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    # * 返回请求
    #-------------------------------------------------------------------------------------------------------
    #     @http_request     请求
    #     @http_response    返回数据
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    def response(http_request, http_response)
        
        http_request.response(http_response);
        
    end
    
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    # * 开始服务
    #-------------------------------------------------------------------------------------------------------
    #     @ip     ip地址
    #     @port   端口
    #     @proc   开始后的回调
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    def start_server(ip, port, &proc)
        super(ip, port, T_HTTP);
        @start_proc = proc;
    end
    
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    # * 有请求的时候
    #-------------------------------------------------------------------------------------------------------
    #     @session_id 暂定 预留!
    #     @request    请求
    #     @return     返回数据
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    def on_request(session_id, pack)
        
        request = HTTPRequest.parse(pack);
				resp = on_handle_request(request);
		 		resp.set_cookies(request.cookies);
        response(request, resp);
        
    end
		
		
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    # * 處理請求,並且返回HTTPResponse
    #-------------------------------------------------------------------------------------------------------
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
		def on_handle_request(request)
      
      return HTTPResponse.new(200, "Hello");
		end
		
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    # * 当服务完成开启的回调
    #-------------------------------------------------------------------------------------------------------
    #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    def on_start()
        if(@start_proc != nil)
            @start_proc.call(self);
        end
    end
    
    
    
end
