00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 #include "binary_serialization.h" 00012 00013 #include <opc/ua/protocol/endpoints.h> 00014 #include <opc/ua/protocol/protocol.h> 00015 #include <opc/ua/protocol/binary/stream.h> 00016 00017 #include <algorithm> 00018 #include <memory> 00019 #include <string> 00020 00021 namespace OpcUa 00022 { 00023 FindServersRequest::FindServersRequest() 00024 : TypeId(FIND_ServerS_REQUEST) 00025 { 00026 00027 } 00028 00029 FindServersResponse::FindServersResponse() 00030 : TypeId(FIND_ServerS_RESPONSE) 00031 { 00032 00033 } 00034 00035 namespace Binary 00036 { 00037 00038 //----------------------------------------------------- 00039 // FindServersParameters 00040 //----------------------------------------------------- 00041 00042 template<> 00043 std::size_t RawSize<FindServersParameters>(const FindServersParameters& params) 00044 { 00045 return RawSize(params.EndpointUrl) + 00046 RawSizeContainer(params.Locales) + 00047 RawSizeContainer(params.ServersToReturn); 00048 } 00049 00050 template<> 00051 void DataSerializer::Serialize<FindServersParameters>(const FindServersParameters& params) 00052 { 00053 *this << params.EndpointUrl; 00054 *this << params.Locales; 00055 *this << params.ServersToReturn; 00056 } 00057 00058 template<> 00059 void DataDeserializer::Deserialize<FindServersParameters>(FindServersParameters& params) 00060 { 00061 *this >> params.EndpointUrl; 00062 *this >> params.Locales; 00063 *this >> params.ServersToReturn; 00064 } 00065 00066 //--------------------------------------------------- 00067 // FindServersRequest 00068 //--------------------------------------------------- 00069 00070 template<> 00071 std::size_t RawSize<FindServersRequest>(const FindServersRequest& request) 00072 { 00073 return RawSize(request.TypeId) + RawSize(request.Header) + RawSize(request.Parameters); 00074 } 00075 00076 template<> 00077 void DataSerializer::Serialize<FindServersRequest>(const FindServersRequest& request) 00078 { 00079 *this << request.TypeId; 00080 *this << request.Header; 00081 *this << request.Parameters; 00082 } 00083 00084 template<> 00085 void DataDeserializer::Deserialize<FindServersRequest>(FindServersRequest& request) 00086 { 00087 *this >> request.TypeId; 00088 *this >> request.Header; 00089 *this >> request.Parameters; 00090 } 00091 00092 //----------------------------------------------------- 00093 // FindServersData 00094 //----------------------------------------------------- 00095 00096 template<> 00097 std::size_t RawSize<FindServersData>(const FindServersData& data) 00098 { 00099 return RawSizeContainer(data.Descriptions); 00100 } 00101 00102 template<> 00103 void DataSerializer::Serialize<FindServersData>(const FindServersData& data) 00104 { 00105 SerializeContainer(*this, data.Descriptions); 00106 } 00107 00108 template<> 00109 void DataDeserializer::Deserialize<FindServersData>(FindServersData& data) 00110 { 00111 DeserializeContainer(*this, data.Descriptions); 00112 } 00113 00114 //----------------------------------------------------- 00115 // FindServersResponse 00116 //----------------------------------------------------- 00117 00118 template<> 00119 std::size_t RawSize<FindServersResponse>(const FindServersResponse& resp) 00120 { 00121 return RawSize(resp.TypeId) + RawSize(resp.Header) + RawSize(resp.Data); 00122 } 00123 00124 template<> 00125 void DataSerializer::Serialize<FindServersResponse>(const FindServersResponse& resp) 00126 { 00127 *this << resp.TypeId; 00128 *this << resp.Header; 00129 *this << resp.Data; 00130 } 00131 00132 template<> 00133 void DataDeserializer::Deserialize<FindServersResponse>(FindServersResponse& resp) 00134 { 00135 *this >> resp.TypeId; 00136 *this >> resp.Header; 00137 *this >> resp.Data; 00138 } 00139 00140 } 00141 } 00142