From 17f603fd65cdb0d566f9fdc47ccd4c4a4b0579ec Mon Sep 17 00:00:00 2001
From: Hans Moog <hm@mkjc.net>
Date: Thu, 9 May 2019 13:24:08 +0200
Subject: [PATCH] Refactor: refactored gossip module

---
 plugins/gossip/events.go          |  24 +++++----
 plugins/gossip/neighbormanager.go |  34 ------------
 plugins/gossip/neighbors.go       |  86 ++++++++++++++++++++++++++++++
 plugins/gossip/protocol.go        |  17 +++---
 plugins/gossip/protocol_v1.go     |  22 ++++----
 plugins/gossip/protocol_v1.png    | Bin 22672 -> 24951 bytes
 plugins/gossip/server.go          |   2 +-
 7 files changed, 123 insertions(+), 62 deletions(-)
 delete mode 100644 plugins/gossip/neighbormanager.go
 create mode 100644 plugins/gossip/neighbors.go

diff --git a/plugins/gossip/events.go b/plugins/gossip/events.go
index 0a0a5a1a..e08c6813 100644
--- a/plugins/gossip/events.go
+++ b/plugins/gossip/events.go
@@ -6,9 +6,10 @@ import (
 )
 
 var Events = pluginEvents{
-    AddNeighbor:        events.NewEvent(errorCaller),
-    RemoveNeighbor:     events.NewEvent(errorCaller),
-    DropNeighbor:       events.NewEvent(errorCaller),
+    AddNeighbor:        events.NewEvent(neighborCaller),
+    UpdateNeighbor:     events.NewEvent(neighborCaller),
+    RemoveNeighbor:     events.NewEvent(neighborCaller),
+    DropNeighbor:       events.NewEvent(neighborCaller),
     IncomingConnection: events.NewEvent(errorCaller),
     ReceiveTransaction: events.NewEvent(transactionCaller),
     Error:              events.NewEvent(errorCaller),
@@ -17,13 +18,14 @@ var Events = pluginEvents{
 type pluginEvents struct {
     // neighbor events
     AddNeighbor    *events.Event
+    UpdateNeighbor *events.Event
     RemoveNeighbor *events.Event
-    DropNeighbor   *events.Event
 
     // low level network events
     IncomingConnection *events.Event
 
     // high level protocol events
+    DropNeighbor              *events.Event
     SendTransaction           *events.Event
     SendTransactionRequest    *events.Event
     ReceiveTransaction        *events.Event
@@ -34,12 +36,6 @@ type pluginEvents struct {
     Error *events.Event
 }
 
-func intCaller(handler interface{}, params ...interface{}) { handler.(func(int))(params[0].(int)) }
-
-func errorCaller(handler interface{}, params ...interface{}) { handler.(func(error))(params[0].(error)) }
-
-func transactionCaller(handler interface{}, params ...interface{}) { handler.(func(*transaction.Transaction))(params[0].(*transaction.Transaction)) }
-
 type protocolEvents struct {
     ReceiveVersion         *events.Event
     ReceiveIdentification  *events.Event
@@ -50,3 +46,11 @@ type protocolEvents struct {
     ReceiveRequestData     *events.Event
     Error                  *events.Event
 }
+
+func intCaller(handler interface{}, params ...interface{}) { handler.(func(int))(params[0].(int)) }
+
+func neighborCaller(handler interface{}, params ...interface{}) { handler.(func(*Peer))(params[0].(*Peer)) }
+
+func errorCaller(handler interface{}, params ...interface{}) { handler.(func(error))(params[0].(error)) }
+
+func transactionCaller(handler interface{}, params ...interface{}) { handler.(func(*transaction.Transaction))(params[0].(*transaction.Transaction)) }
diff --git a/plugins/gossip/neighbormanager.go b/plugins/gossip/neighbormanager.go
deleted file mode 100644
index 60782adb..00000000
--- a/plugins/gossip/neighbormanager.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package gossip
-
-import (
-    "github.com/iotaledger/goshimmer/packages/identity"
-    "github.com/iotaledger/goshimmer/packages/network"
-    "net"
-)
-
-const (
-    MARSHALLED_NEIGHBOR_TOTAL_SIZE = 1
-)
-
-type Neighbor struct {
-    Conn     *network.ManagedConnection
-    Identity identity.Identity
-    Address  net.IP
-    Port     uint16
-}
-
-func UnmarshalNeighbor(data []byte) (*Neighbor, error) {
-    return &Neighbor{}, nil
-}
-
-func (neighbor *Neighbor) Marshal() []byte {
-    return nil
-}
-
-func AddNeighbor() {
-
-}
-
-func GetNeighbor() {
-
-}
diff --git a/plugins/gossip/neighbors.go b/plugins/gossip/neighbors.go
new file mode 100644
index 00000000..77b7247d
--- /dev/null
+++ b/plugins/gossip/neighbors.go
@@ -0,0 +1,86 @@
+package gossip
+
+import (
+    "github.com/iotaledger/goshimmer/packages/identity"
+    "github.com/iotaledger/goshimmer/packages/network"
+    "net"
+    "sync"
+)
+
+type Peer struct {
+    Identity identity.Identity
+    Address  net.IP
+    Port     uint16
+    Conn     *network.ManagedConnection
+}
+
+func UnmarshalPeer(data []byte) (*Peer, error) {
+    return &Peer{}, nil
+}
+
+func (peer *Peer) Marshal() []byte {
+    return nil
+}
+
+func (peer *Peer) Equals(other *Peer) bool {
+    return peer.Identity.StringIdentifier == peer.Identity.StringIdentifier &&
+        peer.Port == other.Port && peer.Address.String() == other.Address.String()
+}
+
+func AddNeighbor(newNeighbor *Peer) {
+    neighborLock.Lock()
+    defer neighborLock.Lock()
+
+    if neighbor, exists := neighbors[newNeighbor.Identity.StringIdentifier]; !exists {
+        neighbors[newNeighbor.Identity.StringIdentifier] = newNeighbor
+
+        Events.AddNeighbor.Trigger(newNeighbor)
+    } else {
+        if !newNeighbor.Equals(neighbor) {
+            neighbor.Identity = neighbor.Identity
+            neighbor.Port = neighbor.Port
+            neighbor.Address = neighbor.Address
+
+            Events.UpdateNeighbor.Trigger(newNeighbor)
+        }
+    }
+}
+
+func RemoveNeighbor(identifier string) {
+    neighborLock.Lock()
+    defer neighborLock.Lock()
+
+    if neighbor, exists := neighbors[identifier]; exists {
+        delete(neighbors, identifier)
+
+        Events.RemoveNeighbor.Trigger(neighbor)
+    }
+}
+
+func GetNeighbor(neighbor *Peer) (*Peer, bool) {
+    neighborLock.RLock()
+    defer neighborLock.RUnlock()
+
+    neighbor, exists := neighbors[neighbor.Identity.StringIdentifier]
+
+    return neighbor, exists
+}
+
+func GetNeighbors() map[string]*Peer {
+    neighborLock.RLock()
+    defer neighborLock.RUnlock()
+
+    result := make(map[string]*Peer)
+    for id, neighbor := range neighbors {
+        result[id] = neighbor
+    }
+
+    return result
+}
+
+const (
+    MARSHALLED_NEIGHBOR_TOTAL_SIZE = 1
+)
+
+var neighbors = make(map[string]*Peer)
+var neighborLock sync.RWMutex
diff --git a/plugins/gossip/protocol.go b/plugins/gossip/protocol.go
index 1612eced..c2f6e866 100644
--- a/plugins/gossip/protocol.go
+++ b/plugins/gossip/protocol.go
@@ -2,26 +2,31 @@ package gossip
 
 import (
     "github.com/iotaledger/goshimmer/packages/errors"
+    "github.com/iotaledger/goshimmer/packages/events"
     "strconv"
 )
 
-//region interfaces ////////////////////////////////////////////////////////////////////////////////////////////////////
+// region interfaces ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 type protocolState interface {
     Consume(protocol *protocol, data []byte, offset int, length int) (int, errors.IdentifiableError)
 }
 
-//endregion ////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// endregion ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 // region protocol /////////////////////////////////////////////////////////////////////////////////////////////////////
 
 type protocol struct {
-    neighbor     *Neighbor
+    Events       protocolEvents
+    neighbor     *Peer
     currentState protocolState
 }
 
-func newProtocol(neighbor *Neighbor) *protocol {
+func newProtocol(neighbor *Peer) *protocol {
     protocol := &protocol{
+        Events: protocolEvents{
+            ReceiveVersion: events.NewEvent(intCaller),
+        },
         neighbor:     neighbor,
         currentState: &versionState{},
     }
@@ -47,14 +52,14 @@ func (protocol *protocol) parseData(data []byte) {
 
 // endregion ////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-// region versionState //////////////////////////////////////////////////////////////////////////////////////////////////
+// region versionState /////////////////////////////////////////////////////////////////////////////////////////////////
 
 type versionState struct{}
 
 func (state *versionState) Consume(protocol *protocol, data []byte, offset int, length int) (int, errors.IdentifiableError) {
     switch data[offset] {
     case 1:
-        Events.ReceiveVersion.Trigger(1)
+        protocol.Events.ReceiveVersion.Trigger(1)
 
         protocol.currentState = newIndentificationStateV1()
 
diff --git a/plugins/gossip/protocol_v1.go b/plugins/gossip/protocol_v1.go
index 008b0243..72a418ab 100644
--- a/plugins/gossip/protocol_v1.go
+++ b/plugins/gossip/protocol_v1.go
@@ -26,13 +26,13 @@ func (state *indentificationStateV1) Consume(protocol *protocol, data []byte, of
 
     state.offset += bytesRead
     if state.offset == MARSHALLED_NEIGHBOR_TOTAL_SIZE {
-        if unmarshalledNeighbor, err := UnmarshalNeighbor(state.buffer); err != nil {
+        if unmarshalledNeighbor, err := UnmarshalPeer(state.buffer); err != nil {
             return bytesRead, ErrInvalidAuthenticationMessage.Derive(err, "invalid authentication message")
         } else {
             protocol.neighbor.Identity = unmarshalledNeighbor.Identity
             protocol.neighbor.Port = unmarshalledNeighbor.Port
 
-            Events.ReceiveIdentification.Trigger(protocol.neighbor)
+            protocol.Events.ReceiveIdentification.Trigger(protocol.neighbor)
 
             protocol.currentState = newacceptanceStateV1()
             state.offset = 0
@@ -54,17 +54,17 @@ func newacceptanceStateV1() *acceptanceStateV1 {
 
 func (state *acceptanceStateV1) Consume(protocol *protocol, data []byte, offset int, length int) (int, errors.IdentifiableError) {
     switch data[offset] {
-        case 1:
-            Events.AcceptConnection.Trigger()
+        case 0:
+            protocol.Events.RejectConnection.Trigger()
 
-            protocol.currentState = newDispatchStateV1()
+            protocol.neighbor.Conn.Close()
+            protocol.currentState = nil
         break
 
-        case 2:
-            Events.RejectConnection.Trigger()
+        case 1:
+            protocol.Events.AcceptConnection.Trigger()
 
-            protocol.neighbor.Conn.Close()
-            protocol.currentState = nil
+            protocol.currentState = newDispatchStateV1()
         break
 
         default:
@@ -87,7 +87,7 @@ func newDispatchStateV1() *dispatchStateV1 {
 func (state *dispatchStateV1) Consume(protocol *protocol, data []byte, offset int, length int) (int, errors.IdentifiableError) {
     switch data[0] {
         case 0:
-            Events.RejectConnection.Trigger()
+            protocol.Events.RejectConnection.Trigger()
 
             protocol.neighbor.Conn.Close()
             protocol.currentState = nil
@@ -130,7 +130,7 @@ func (state *transactionStateV1) Consume(protocol *protocol, data []byte, offset
         transactionData := make([]byte, transaction.MARSHALLED_TOTAL_SIZE)
         copy(transactionData, state.buffer)
 
-        Events.ReceiveTransactionData.Trigger(transactionData)
+        protocol.Events.ReceiveTransactionData.Trigger(transactionData)
 
         go func() {
             Events.ReceiveTransaction.Trigger(transaction.FromBytes(transactionData))
diff --git a/plugins/gossip/protocol_v1.png b/plugins/gossip/protocol_v1.png
index f5c361b612b7bc7644c4e65829c63fa79547efb2..ce667756467d35bf33185cf5c3727894ea7c4e57 100644
GIT binary patch
literal 24951
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

literal 22672
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
Oz~JfX=d#Wzp$PzX`iDdS

diff --git a/plugins/gossip/server.go b/plugins/gossip/server.go
index 76bd245a..6595dc92 100644
--- a/plugins/gossip/server.go
+++ b/plugins/gossip/server.go
@@ -14,7 +14,7 @@ var TCPServer = tcp.NewServer()
 
 func configureServer(plugin *node.Plugin) {
     TCPServer.Events.Connect.Attach(events.NewClosure(func(conn *network.ManagedConnection) {
-        neighbor := &Neighbor{
+        neighbor := &Peer{
             Address: conn.RemoteAddr().(*net.TCPAddr).IP,
         }
 
-- 
GitLab