%%%-------------------------------------------------------------------
%%% @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                ::string(),
    error_msg               ::string(),
    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}).