%%%-------------------------------------------------------------------
%%% @author dlive
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 16. 十月 2016 下午11:38
%%%-------------------------------------------------------------------
-author("dlive").

-include("hessian.hrl").

-define(DUBBO_VERSION,<<"2.6.0">>).
-define(DUBBO_MEGIC, -9541). %% new version 16#dabb
-define(DUBBO_MEGIC_HIGH, 16#da). %% new version 16#da
-define(DUBBO_MEGIC_LOW, 16#bb). %% new version 16#bb

-define(DUBBO_DEFAULT_PORT,20880).

%% 序列化类型
-define(SERIALIZATION_HESSIAN,2).
-define(SERIALIZATION_FASTJSON,6).
-define(SERIALIZATION_KRYO,8).

-define(RESPONSE_WITH_EXCEPTION,0).
-define(RESPONSE_VALUE,1).
-define(RESPONSE_NULL_VALUE,2).


-define(RESPONSE_STATE_OK,20).

-define(REQUEST_TIME_OUT,5000).

-define(LINE_SEPERATOR,<<"\n"/utf8>>).

-record(dubbo_request,{
    serialize_type = 2      ::integer(),
    is_event = true         ::boolean(),
    is_twoway = false       ::boolean(),
    data                    ::null|dubbo_rpc_invocation,
    mid                     ::integer(),
    mversion                ::binary(),
    error_msg               ::binary(),
    state                   ::byte(),
    decode_state
}).

-record(dubbo_response,{
    serialize_type = 2      ::integer(),
    is_event = true         ::boolean(),
    is_twoway = false       ::boolean(),
    data                    ::null|dubbo_rpc_invocation,
    mid                     ::integer(),
    mversion                ::string(),
    error_msg               ::string(),
    state                   ::byte(),
    decode_state
}).

-record(dubbo_rpc_invocation,{
    serialVersionUID = -4355285085441097045,
    className               ::string(),
    classVersion            ::string(),
    methodName              ::string(),
    parameterDesc           ::string(),
    parameterTypes=[]       ::[#type_def{}],
    parameters=[]           ::[term()],
    attachments=[]          ::[term()]
}).

-record(consumer_config,{
    interface,
    application = <<"NoName">> ::binary(),
    category = <<"consumers">> ::binary(),
    check=false                ::boolean(),
    default_timeout=500        ::integer(),
    dubbo_version= <<"2.5.3">> ::binary(),
    methods=[]                 ::list(),
    revision= <<"">>           ::binary(),
    side= <<"consumers">>      ::binary()
}).

-record(provider_config,{
    protocol,
    host,
    port,
    interface,
    anyhost=true,
    executes=1,
    application,
    dubbo= <<"2.5.3">>,
    methods=[],
    side= <<"provider">>
}).



-record(interface_list,{interface,pid,connection_info}).
-record(provider_node_list,{host_flag,connection_info}).
-record(connection_info,{connection_id,pid,weight,host_flag}).

-type dubbo_request() ::#dubbo_request{}.
-type dubbo_response()::#dubbo_response{}.