]> git.lizzy.rs Git - dragonnet.git/blobdiff - peer.h
Refactor type hooks
[dragonnet.git] / peer.h
diff --git a/peer.h b/peer.h
index f4a4d7d89b50786e0c6e07a133d562c864d9d963..5dc06fe5b2e11115ffb555492038ac0908d0671f 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -2,10 +2,8 @@
 #define _DRAGONNET_PEER_H_
 
 #include <pthread.h>
-
-#include "addr.h"
-
-extern const struct timeval dragonnet_timeout;
+#include <dragontype/number.h>
+#include <dragonnet/addr.h>
 
 typedef enum {
        DRAGONNET_PEER_CREATED,
@@ -13,15 +11,20 @@ typedef enum {
        DRAGONNET_PEER_CLOSED
 } DragonnetPeerState;
 
-typedef struct {
+typedef struct dragonnet_peer {
        int sock;
        DragonnetAddr laddr, raddr;
        DragonnetPeerState state;
+       pthread_t recv_thread;
+
+       void (**on_recv_type)(struct dragonnet_peer *, void *);
 
        pthread_rwlock_t mu;
 } DragonnetPeer;
 
 DragonnetPeer *dragonnet_connect(char *addr);
+void dragonnet_peer_set_recv_hook(DragonnetPeer *p, u16 type_id,
+               void (*on_recv)(struct dragonnet_peer *, void *));
 void dragonnet_peer_run(DragonnetPeer *p);
 void dragonnet_peer_close(DragonnetPeer *p);
 void dragonnet_peer_delete(DragonnetPeer *p);