github.com/mysteriumnetwork/node@v0.0.0-20240516044423-365054f76801/communication/dialog.go (about) 1 /* 2 * Copyright (C) 2017 The "MysteriumNetwork/node" Authors. 3 * 4 * This program is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 3 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 package communication 19 20 import ( 21 "github.com/mysteriumnetwork/node/identity" 22 "github.com/mysteriumnetwork/node/market" 23 ) 24 25 // Dialog represent established connection between 2 peers in network. 26 // Enables bidirectional communication with another peer. 27 type Dialog interface { 28 PeerID() identity.Identity 29 Sender 30 Receiver 31 Close() error 32 } 33 34 // DialogWaiter defines server which: 35 // - waits and serves incoming dialog requests 36 // - negotiates with Dialog initiator 37 // - finally creates Dialog, when it is accepted 38 type DialogWaiter interface { 39 GetContact() market.Contact 40 Start(DialogHandler) error 41 Stop() error 42 } 43 44 // DialogHandler defines how to handle incoming Dialog 45 type DialogHandler interface { 46 Handle(Dialog) error 47 } 48 49 // DialogEstablisher interface defines client which: 50 // - initiates Dialog requests to network 51 // - creates Dialog, when it is negotiated 52 type DialogEstablisher interface { 53 EstablishDialog(peerID identity.Identity, peerContact market.Contact) (Dialog, error) 54 }