kraken

Форк
0
/
peer_info.go 
72 строки · 2.0 Кб
1
// Copyright (c) 2016-2019 Uber Technologies, Inc.
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//     http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
package core
15

16
import "sort"
17

18
// PeerInfo defines peer metadata scoped to a torrent.
19
type PeerInfo struct {
20
	PeerID   PeerID `json:"peer_id"`
21
	IP       string `json:"ip"`
22
	Port     int    `json:"port"`
23
	Origin   bool   `json:"origin"`
24
	Complete bool   `json:"complete"`
25
}
26

27
// NewPeerInfo creates a new PeerInfo.
28
func NewPeerInfo(
29
	peerID PeerID,
30
	ip string,
31
	port int,
32
	origin bool,
33
	complete bool) *PeerInfo {
34

35
	return &PeerInfo{
36
		PeerID:   peerID,
37
		IP:       ip,
38
		Port:     port,
39
		Origin:   origin,
40
		Complete: complete,
41
	}
42
}
43

44
// PeerInfoFromContext derives PeerInfo from a PeerContext.
45
func PeerInfoFromContext(pctx PeerContext, complete bool) *PeerInfo {
46
	return NewPeerInfo(pctx.PeerID, pctx.IP, pctx.Port, pctx.Origin, complete)
47
}
48

49
// PeerInfos groups PeerInfo structs for sorting.
50
type PeerInfos []*PeerInfo
51

52
// Len for sorting.
53
func (s PeerInfos) Len() int { return len(s) }
54

55
// Swap for sorting
56
func (s PeerInfos) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
57

58
// PeersByPeerID sorts PeerInfos by peer id.
59
type PeersByPeerID struct{ PeerInfos }
60

61
// Less for sorting.
62
func (s PeersByPeerID) Less(i, j int) bool {
63
	return s.PeerInfos[i].PeerID.LessThan(s.PeerInfos[j].PeerID)
64
}
65

66
// SortedByPeerID returns a copy of peers which has been sorted by peer id.
67
func SortedByPeerID(peers []*PeerInfo) []*PeerInfo {
68
	c := make([]*PeerInfo, len(peers))
69
	copy(c, peers)
70
	sort.Sort(PeersByPeerID{PeerInfos(c)})
71
	return c
72
}
73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.