]> git.lizzy.rs Git - dragonnet.git/blobdiff - peer.h
Rework multithreading responsibilities and disconnect process
[dragonnet.git] / peer.h
diff --git a/peer.h b/peer.h
index 73050e160a3ed8bcb02ea9fcd937506c51ce06bc..8b1a65a68e3a59998901d29938c9bd6adc31c23b 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -1,29 +1,28 @@
 #ifndef _DRAGONNET_PEER_H_
 #define _DRAGONNET_PEER_H_
 
+#include <dragonnet/addr.h>
 #include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
 
-#include "addr.h"
+typedef uint16_t DragonnetTypeId;
 
-const extern struct timeval dragonnet_timeout;
-
-typedef enum {
-       DRAGONNET_PEER_CREATED,
-       DRAGONNET_PEER_ACTIVE,
-       DRAGONNET_PEER_CLOSED
-} DragonnetPeerState;
-
-typedef struct {
+typedef struct dragonnet_peer {
        int sock;
        DragonnetAddr laddr, raddr;
-       DragonnetPeerState state;
+       pthread_t recv_thread;
+       pthread_mutex_t mtx;
+
+       void (*on_disconnect)(struct dragonnet_peer *);
+       bool (*on_recv)(struct dragonnet_peer *, DragonnetTypeId, void *);
+       void (**on_recv_type)(struct dragonnet_peer *, void *);
 
-       pthread_rwlock_t *mu;
+       void *extra;
 } DragonnetPeer;
 
 DragonnetPeer *dragonnet_connect(char *addr);
 void dragonnet_peer_run(DragonnetPeer *p);
-void dragonnet_peer_close(DragonnetPeer *p);
-void dragonnet_peer_delete(DragonnetPeer *p);
+void dragonnet_peer_shutdown(DragonnetPeer *p);
 
 #endif