1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef SINGLE_VER_SERIALIZE_MANAGER_NEW_H 17 #define SINGLE_VER_SERIALIZE_MANAGER_NEW_H 18 19 #include <mutex> 20 #include "icommunicator.h" 21 #include "isync_packet.h" 22 #include "message_transform.h" 23 #include "parcel.h" 24 #include "single_ver_data_packet.h" 25 26 namespace DistributedDB { 27 class SingleVerSerializeManager { 28 public: 29 SingleVerSerializeManager(); 30 virtual ~SingleVerSerializeManager(); 31 32 DISABLE_COPY_ASSIGN_MOVE(SingleVerSerializeManager); 33 34 static int Serialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 35 36 static int DeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 37 38 static uint32_t CalculateLen(const Message *inMsg); 39 40 static int RegisterTransformFunc(); 41 private: 42 static bool IsPacketValid(const Message *inMsg); 43 44 static int DataSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 45 static int ControlSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 46 47 static int DataDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 48 static int ControlDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 49 50 static uint32_t CalculateDataLen(const Message *inMsg); 51 static uint32_t CalculateControlLen(const Message *inMsg); 52 53 static int DataPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 54 static int DataPacketSyncerPartSerialization(Parcel &parcel, const DataRequestPacket *packet); 55 static int DataPacketQuerySyncSerialization(Parcel &parcel, const DataRequestPacket *packet); 56 static int DataPacketExtraConditionsSerialization(Parcel &parcel, const DataRequestPacket *packet); 57 static int DataPacketCalculateLen(const Message *inMsg, uint32_t &len); 58 59 static int DataPacketQuerySyncDeSerialization(Parcel &parcel, DataRequestPacket *packet); 60 static int DataPacketCompressDataDeSerialization(Parcel &parcel, DataRequestPacket *packet); 61 static int DataPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 62 static int DataPacketSyncerPartDeSerialization(Parcel &parcel, DataRequestPacket *packet, uint32_t packLen, 63 uint32_t length, uint32_t version); 64 static int DataPacketExtraConditionsDeserialization(Parcel &parcel, DataRequestPacket *packet); 65 66 static int AckPacketCalculateLen(const Message *inMsg, uint32_t &len); 67 static int AckPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 68 static int AckPacketSyncerPartSerializationV1(Parcel &parcel, const DataAckPacket *packet); 69 70 static int AckPacketSyncerPartDeSerializationV1(Parcel &parcel, DataAckPacket &packet); 71 static int AckPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 72 73 static int ControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 74 static int ControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 75 static int ControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 76 77 static int AckControlPacketCalculateLen(const Message *inMsg, uint32_t &len); 78 static int AckControlPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 79 static int AckControlPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 80 81 static int ControlRequestSerialization(Parcel &parcel, const Message *inMsg); 82 static int ControlRequestDeSerialization(Parcel &parcel, ControlRequestPacket &packet); 83 static int SubscribeCalculateLen(const Message *inMsg, uint32_t &len); 84 static int SubscribeSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 85 static int SubscribeDeSerialization(Parcel &parcel, Message *inMsg, ControlRequestPacket &controlPacket); 86 87 static int RegisterCommunicatorTransformFunc(); 88 static void RegisterInnerTransformFunc(); 89 90 static uint32_t ISyncPacketCalculateLen(const Message *inMsg); 91 static int ISyncPacketSerialization(uint8_t *buffer, uint32_t length, const Message *inMsg); 92 static int ISyncPacketDeSerialization(const uint8_t *buffer, uint32_t length, Message *inMsg); 93 static int BuildISyncPacket(Message *inMsg, ISyncPacket *&packet); 94 95 static std::mutex handlesLock_; 96 static std::map<uint32_t, TransformFunc> messageHandles_; 97 }; 98 } // namespace DistributedDB 99 100 #endif // SINGLE_VER_SERIALIZE_MANAGER_NEW_H