Skip to content
Snippets Groups Projects
Select Git revision
  • 36dd741d23c7ee4a84297d8c09dacc4524c0e5f1
  • without_tipselection default
  • develop protected
  • fix/grafana-local-dashboard
  • wasp
  • fix/dashboard-explorer-freeze
  • master
  • feat/timerqueue
  • test/sync_debug_and_650
  • feat/sync_revamp_inv
  • wip/sync
  • tool/db-recovery
  • portcheck/fix
  • fix/synchronization
  • feat/new-dashboard-analysis
  • feat/refactored-analysis-dashboard
  • feat/new-analysis-dashboard
  • test/demo-prometheus-fpc
  • prometheus_metrics
  • wip/analysis-server
  • merge/fpc-test-value-transfer
  • v0.2.2
  • v0.2.1
  • v0.2.0
  • v0.1.3
  • v0.1.2
  • v0.1.1
  • v0.1.0
28 results

protocol_v1.go

Blame
  • protocol_v1.go 12.61 KiB
    package gossip
    
    import (
        "bytes"
        "github.com/iotaledger/goshimmer/packages/accountability"
        "github.com/iotaledger/goshimmer/packages/byteutils"
        "github.com/iotaledger/goshimmer/packages/errors"
        "github.com/iotaledger/goshimmer/packages/events"
        "github.com/iotaledger/goshimmer/packages/identity"
        "github.com/iotaledger/goshimmer/packages/ternary"
        "github.com/iotaledger/goshimmer/packages/transaction"
        "strconv"
    )
    
    // region protocolV1 ///////////////////////////////////////////////////////////////////////////////////////////////////
    
    func protocolV1(protocol *protocol) errors.IdentifiableError {
        if err := protocol.Send(accountability.OWN_ID); err != nil {
            return err
        }
    
        onReceiveIdentification := events.NewClosure(func(identity *identity.Identity) {
            if protocol.Neighbor == nil {
                if err := protocol.Send(CONNECTION_REJECT); err != nil {
                    return
                }
            } else {
                if err := protocol.Send(CONNECTION_ACCEPT); err != nil {
                    return
                }
    
                protocol.handshakeMutex.Lock()
                defer protocol.handshakeMutex.Unlock()
    
                protocol.sendHandshakeCompleted = true
                if protocol.receiveHandshakeCompleted {
                    protocol.Events.HandshakeCompleted.Trigger()
                }
            }
        })
    
        protocol.Events.ReceiveIdentification.Attach(onReceiveIdentification)
    
        return nil
    }
    
    func sendTransactionV1(protocol *protocol, tx *transaction.Transaction) {
        if _, ok := protocol.SendState.(*dispatchStateV1); ok {
            protocol.sendMutex.Lock()
            defer protocol.sendMutex.Unlock()
    
            if err := protocol.send(DISPATCH_TRANSACTION); err != nil {
                return
            }
            if err := protocol.send(tx); err != nil {
                return
            }
        }
    }
    
    // endregion ///////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    // region indentificationStateV1 ///////////////////////////////////////////////////////////////////////////////////////
    
    type indentificationStateV1 struct {
        protocol *protocol
        buffer   []byte
        offset   int
    }