]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/connection.h
mud placed in sunlight no longer instantly turns to grass; also tuned transforming...
[dragonfireclient.git] / src / connection.h
index 82cf9d38e5d61a59d6e0070279c28b1d007526de..6eb2f2824642cc86661fd4c788e5c090d515e366 100644 (file)
@@ -99,19 +99,6 @@ class ProcessedSilentlyException : public BaseException
        {}
 };
 
-class GotSplitPacketException
-{
-       SharedBuffer<u8> m_data;
-public:
-       GotSplitPacketException(SharedBuffer<u8> data):
-               m_data(data)
-       {}
-       SharedBuffer<u8> getData()
-       {
-               return m_data;
-       }
-};
-
 inline u16 readPeerId(u8 *packetdata)
 {
        return readU16(&packetdata[4]);
@@ -209,7 +196,7 @@ TODO: Should we have a receiver_peer_id also?
        Only channels 0, 1 and 2 exist.
 */
 #define BASE_HEADER_SIZE 7
-#define PEER_ID_NEW 0
+#define PEER_ID_INEXISTENT 0
 #define PEER_ID_SERVER 1
 #define CHANNEL_COUNT 3
 /*
@@ -226,12 +213,15 @@ controltype and data description:
        CONTROLTYPE_SET_PEER_ID
                [2] u16 peer_id_new
        CONTROLTYPE_PING
-       - This can be sent in a reliable packet to get a reply
+       - There is no actual reply, but this can be sent in a reliable
+         packet to get a reply
+       CONTROLTYPE_DISCO
 */
 #define TYPE_CONTROL 0
 #define CONTROLTYPE_ACK 0
 #define CONTROLTYPE_SET_PEER_ID 1
 #define CONTROLTYPE_PING 2
+#define CONTROLTYPE_DISCO 3
 /*
 ORIGINAL: This is a plain packet with no control and no error
 checking at all.
@@ -311,10 +301,10 @@ class IncomingSplitBuffer
 public:
        ~IncomingSplitBuffer();
        /*
-               This will throw a GotSplitPacketException when a full
-               split packet is constructed.
+               Returns a reference counted buffer of length != 0 when a full split
+               packet is constructed. If not, returns one of length 0.
        */
-       void insert(BufferedPacket &p, bool reliable);
+       SharedBuffer<u8> insert(BufferedPacket &p, bool reliable);
        
        void removeUnreliableTimedOuts(float dtime, float timeout);
        
@@ -442,12 +432,15 @@ class Connection
        void Connect(Address address);
        bool Connected();
 
+       void Disconnect();
+
        // Sets peer_id
        SharedBuffer<u8> GetFromBuffers(u16 &peer_id);
 
        // The peer_id of sender is stored in peer_id
        // Return value: I guess this always throws an exception or
        //               actually gets data
+       // May call PeerHandler methods
        u32 Receive(u16 &peer_id, u8 *data, u32 datasize);
        
        // These will automatically package the data as an original or split
@@ -460,12 +453,18 @@ class Connection
        // Sends a raw packet
        void RawSend(const BufferedPacket &packet);
        
+       // May call PeerHandler methods
        void RunTimeouts(float dtime);
+
        // Can throw a PeerNotFoundException
        Peer* GetPeer(u16 peer_id);
        // returns NULL if failed
        Peer* GetPeerNoEx(u16 peer_id);
        core::list<Peer*> GetPeers();
+       
+       // Calls PeerHandler::deletingPeer
+       // Returns false if peer was not found
+       bool deletePeer(u16 peer_id, bool timeout);
 
        void SetPeerID(u16 id){ m_peer_id = id; }
        u16 GetPeerID(){ return m_peer_id; }