Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #pragma once
00015
00020 #include <map>
00021 #include <vector>
00022 #include <list>
00023
00024 namespace kNet
00025 {
00026
00027 class NetworkMessage;
00028
00031 class FragmentedSendManager
00032 {
00033 public:
00034 struct FragmentedTransfer
00035 {
00036 int id;
00037
00039 size_t totalNumFragments;
00040
00041 std::list<NetworkMessage*> fragments;
00042
00043 void AddMessage(NetworkMessage *message);
00044 };
00045
00046 typedef std::list<FragmentedTransfer> TransferList;
00047 TransferList transfers;
00048
00051 FragmentedTransfer *AllocateNewFragmentedTransfer();
00052 void RemoveMessage(FragmentedTransfer *transfer, NetworkMessage *message);
00053
00055 bool AllocateFragmentedTransferID(FragmentedTransfer &transfer);
00056
00057 void FreeAllTransfers();
00058
00059 private:
00060 void FreeFragmentedTransfer(FragmentedTransfer *transfer);
00061 };
00062
00064 class FragmentedReceiveManager
00065 {
00066 public:
00067 struct ReceiveFragment
00068 {
00069 int fragmentIndex;
00070
00071 std::vector<char> data;
00072 };
00073
00074 struct ReceiveTransfer
00075 {
00076 int transferID;
00077
00078 int numTotalFragments;
00079
00080 std::vector<ReceiveFragment> fragments;
00081 };
00082
00083 std::vector<ReceiveTransfer> transfers;
00084
00085 void NewFragmentStartReceived(int transferID, int numTotalFragments, const char *data, size_t numBytes);
00086 bool NewFragmentReceived(int transferID, int fragmentNumber, const char *data, size_t numBytes);
00087 void AssembleMessage(int transferID, std::vector<char> &assembledData);
00088 void FreeMessage(int transferID);
00089 };
00090
00091 }