server.go 1.59 KiB
package gossip
import (
"github.com/iotaledger/goshimmer/packages/daemon"
"github.com/iotaledger/goshimmer/packages/events"
"github.com/iotaledger/goshimmer/packages/network"
"github.com/iotaledger/goshimmer/packages/network/tcp"
"github.com/iotaledger/goshimmer/packages/node"
"net"
"strconv"
)
var TCPServer = tcp.NewServer()
func configureServer(plugin *node.Plugin) {
TCPServer.Events.Connect.Attach(events.NewClosure(func(conn *network.ManagedConnection) {
neighbor := &Neighbor{
Address: conn.RemoteAddr().(*net.TCPAddr).IP,
}
protocol := newProtocol(neighbor)
var onClose, onReceiveData *events.Closure
onReceiveData = events.NewClosure(func(data []byte) {
protocol.parseData(data)
})
onClose = events.NewClosure(func() {
conn.Events.ReceiveData.Detach(onReceiveData)
conn.Events.Close.Detach(onClose)
})
conn.Events.ReceiveData.Attach(onReceiveData)
conn.Events.Close.Attach(onClose)
go conn.Read(make([]byte, 1000))
}))
daemon.Events.Shutdown.Attach(events.NewClosure(func() {
plugin.LogInfo("Stopping TCP Server ...")
TCPServer.Shutdown()
}))
}
func runServer(plugin *node.Plugin) {
plugin.LogInfo("Starting TCP Server (port " + strconv.Itoa(*PORT.Value) + ") ...")
daemon.BackgroundWorker(func() {
plugin.LogSuccess("Starting TCP Server (port " + strconv.Itoa(*PORT.Value) + ") ... done")
TCPServer.Listen(*PORT.Value)
plugin.LogSuccess("Stopping TCP Server ... done")
})
}