From 1e27eb1b25c2998ede63fc7a138477e1ae4b9508 Mon Sep 17 00:00:00 2001 From: Determinant Date: Fri, 28 Jun 2019 15:59:39 -0400 Subject: ... --- network.go | 22 +++++++++++++++------- salticidae | 2 +- test_p2p_stress/main.go | 14 +++++++------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/network.go b/network.go index 86c94dd..cdc882a 100644 --- a/network.go +++ b/network.go @@ -365,7 +365,7 @@ func (self MsgNetwork) AsPeerNetworkUnsafe() PeerNetwork { // Create a MsgNetworkConn handle from a PeerNetworkConn (representing the same // connection). -func NewMsgNetworkConnFromPeerNetWorkConn(conn PeerNetworkConn) MsgNetworkConn { +func NewMsgNetworkConnFromPeerNetworkConn(conn PeerNetworkConn) MsgNetworkConn { res := MsgNetworkConnFromC(C.msgnetwork_conn_new_from_peernetwork_conn(conn.inner)) runtime.SetFinalizer(res, func(self MsgNetworkConn) { self.free() }) return res @@ -373,7 +373,7 @@ func NewMsgNetworkConnFromPeerNetWorkConn(conn PeerNetworkConn) MsgNetworkConn { // Create a PeerNetworkConn handle from a MsgNetworkConn (representing the same // connection and forcing the conversion). -func NewPeerNetworkConnFromMsgNetWorkConnUnsafe(conn MsgNetworkConn) PeerNetworkConn { +func NewPeerNetworkConnFromMsgNetworkConnUnsafe(conn MsgNetworkConn) PeerNetworkConn { res := PeerNetworkConnFromC(C.peernetwork_conn_new_from_msgnetwork_conn_unsafe(conn.inner)) runtime.SetFinalizer(res, func(self PeerNetworkConn) { self.free() }) return res @@ -416,19 +416,27 @@ func (self PeerNetwork) MulticastMsgByMove(msg Msg, addrs []NetAddr) { C.peernetwork_multicast_msg_by_move(self.inner, msg.inner, na.inner) } +// The C function pointer type which takes peernetwork_conn_t*, bool and void* +// (passing in the custom user data allocated by C.malloc) as parameters. +type PeerNetworkPeerCallback = C.peernetwork_peer_callback_t + +// Register a connection handler invoked when p2p connection is established/broken. +func (self PeerNetwork) RegPeerHandler(callback PeerNetworkPeerCallback, userdata rawptr_t) { + C.peernetwork_reg_peer_handler(self.inner, callback, userdata) +} + // The C function pointer type which takes netaddr_t* and void* (passing in the // custom user data allocated by C.malloc) as parameters. -type MsgNetworkUnknownPeerCallback = C.msgnetwork_unknown_peer_callback_t +type PeerNetworkUnknownPeerCallback = C.peernetwork_unknown_peer_callback_t // Register a connection handler invoked when a remote peer that is not in the // list of known peers attempted to connect. By default configuration, the // connection was rejected, and you can call AddPeer() to enroll this peer if // you hope to establish the connection soon. -func (self PeerNetwork) RegUnknownPeerHandler(callback MsgNetworkUnknownPeerCallback, userdata rawptr_t) { +func (self PeerNetwork) RegUnknownPeerHandler(callback PeerNetworkUnknownPeerCallback, userdata rawptr_t) { C.peernetwork_reg_unknown_peer_handler(self.inner, callback, userdata) } - // The C pointer type for a ClientNetwork handle. type CClientNetwork = *C.clientnetwork_t type clientNetwork struct { inner CClientNetwork } @@ -474,7 +482,7 @@ func (self MsgNetwork) AsClientNetworkUnsafe() ClientNetwork { // Create a MsgNetworkConn handle from a ClientNetworkConn (representing the same // connection). -func NewMsgNetworkConnFromClientNetWorkConn(conn ClientNetworkConn) MsgNetworkConn { +func NewMsgNetworkConnFromClientNetworkConn(conn ClientNetworkConn) MsgNetworkConn { res := MsgNetworkConnFromC(C.msgnetwork_conn_new_from_clientnetwork_conn(conn.inner)) runtime.SetFinalizer(res, func(self MsgNetworkConn) { self.free() }) return res @@ -482,7 +490,7 @@ func NewMsgNetworkConnFromClientNetWorkConn(conn ClientNetworkConn) MsgNetworkCo // Create a ClientNetworkConn handle from a MsgNetworkConn (representing the same // connection and forcing the conversion). -func NewClientNetworkConnFromMsgNetWorkConnUnsafe(conn MsgNetworkConn) ClientNetworkConn { +func NewClientNetworkConnFromMsgNetworkConnUnsafe(conn MsgNetworkConn) ClientNetworkConn { res := ClientNetworkConnFromC(C.clientnetwork_conn_new_from_msgnetwork_conn_unsafe(conn.inner)) runtime.SetFinalizer(res, func(self ClientNetworkConn) { self.free() }) return res diff --git a/salticidae b/salticidae index 710e9e8..06b5a84 160000 --- a/salticidae +++ b/salticidae @@ -1 +1 @@ -Subproject commit 710e9e8961cf5039b425e66d2042942b7e4af0c8 +Subproject commit 06b5a84602dc6a5dd76d82c9f88359cdb8cf52da diff --git a/test_p2p_stress/main.go b/test_p2p_stress/main.go index 06a1407..b358d5d 100644 --- a/test_p2p_stress/main.go +++ b/test_p2p_stress/main.go @@ -10,7 +10,7 @@ package main // void onReceiveRand(msg_t *, msgnetwork_conn_t *, void *); // void onReceiveAck(msg_t *, msgnetwork_conn_t *, void *); // void onStopLoop(threadcall_handle_t *, void *); -// void connHandler(msgnetwork_conn_t *, bool, void *); +// void peerHandler(peernetwork_conn_t *, bool, void *); // void errorHandler(SalticidaeCError *, bool, void *); // void onTimeout(timerev_t *, void *); // typedef struct timeout_callback_context_t { @@ -214,12 +214,12 @@ func onReceiveAck(_msg *C.struct_msg_t, _conn *C.struct_msgnetwork_conn_t, userd } } -//export connHandler -func connHandler(_conn *C.struct_msgnetwork_conn_t, connected C.bool, userdata unsafe.Pointer) { - conn := salticidae.MsgNetworkConnFromC(salticidae.CMsgNetworkConn(_conn)) - id := *(*int)(userdata) - app := &apps[id] +//export peerHandler +func peerHandler(_conn *C.struct_peernetwork_conn_t, connected C.bool, userdata unsafe.Pointer) { if connected { + conn := salticidae.NewMsgNetworkConnFromPeerNetworkConn(salticidae.PeerNetworkConnFromC(salticidae.CPeerNetworkConn(_conn))) + id := *(*int)(userdata) + app := &apps[id] if conn.GetMode() == salticidae.CONN_MODE_ACTIVE { tc := app.getTC(addr2id(conn.GetAddr())) tc.state = 1 @@ -288,7 +288,7 @@ func main() { mnet := net.AsMsgNetwork() mnet.RegHandler(MSG_OPCODE_RAND, salticidae.MsgNetworkMsgCallback(C.onReceiveRand), _i) mnet.RegHandler(MSG_OPCODE_ACK, salticidae.MsgNetworkMsgCallback(C.onReceiveAck), _i) - mnet.RegConnHandler(salticidae.MsgNetworkConnCallback(C.connHandler), _i) + net.RegPeerHandler(salticidae.PeerNetworkPeerCallback(C.peerHandler), _i) mnet.RegErrorHandler(salticidae.MsgNetworkErrorCallback(C.errorHandler), _i) mnet.Start() } -- cgit v1.2.3-70-g09d2