github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/node/stars.go (about) 1 package node 2 3 import ( 4 "sort" 5 "sync" 6 ) 7 8 type starsMgr struct { 9 stars []string 10 earth string 11 m sync.RWMutex 12 } 13 14 func NewStarsMgr() *starsMgr { 15 return &starsMgr{} 16 } 17 18 func (s *starsMgr) curStars() []string { 19 s.m.RLock() 20 defer s.m.RUnlock() 21 return s.stars 22 /*return []string{ 23 "04dc2c38fd4985a30f31fe9ab0e1d6ffa85d33d5c8f0a5ff38c45534e8f4ffe751055e6f1bbec984839dd772a68794722683ed12994feb84a13b8086162591418f", 24 "044a147deabaa89e15aab6f586ce8c9b68bf11043ca83387b125d82489252d94e858f7b43a43000d7a949ff1bd8742fcad57434d08b2455bfc5f681dd0cf0a32f6", 25 "0405269acdc54c24220f67911a3ac709b129ff2454717875b789288954bb2e6afaed4d59ff0f4c4d14afff9f6f4e1ffb71a1e5457fa2ca7440a020218559ab7f3f", 26 27 //"045d54e7cebc80e03c52e53a9a3b7601041183514230ae5776996a131942f8f25425144adc67bbe266200fc7357781a9cc579b3814b37b4f46b3de67cf12177da8", 28 //"04a3a9d49d883984c61e3f902f73c4fd0b4067bef3199b3f248a1973d02879e09a89b1b869ea03d40c1816a01fcc2d0a95288c98cfd4386883d9df3015e3f2d72d", 29 }*/ 30 } 31 func (s *starsMgr) pushStars(pubStrs []string) { 32 s.m.Lock() 33 defer s.m.Unlock() 34 for _, v := range pubStrs { 35 isFound := false 36 for _, vi := range s.stars { 37 if vi == v { 38 isFound = true 39 break 40 } 41 } 42 if isFound{ 43 continue 44 } 45 s.stars = append(s.stars, v) 46 } 47 } 48 func (s *starsMgr) popStars(pubStrs []string) { 49 s.m.Lock() 50 defer s.m.Unlock() 51 //linq.From(s.stars).Except(linq.From(pubStrs)).ToSlice(&s.stars) 52 idx := make([]int, 0, len(pubStrs)) 53 for _, v := range pubStrs { 54 for k, vi := range s.stars { 55 if vi == v { 56 idx = append(idx, k) 57 break 58 } 59 } 60 } 61 sort.Ints(idx) 62 l := len(idx) 63 dynamic := len(s.stars) - 1 64 for i := 0; i < l; i++ { 65 tmp := idx[i] - i 66 if tmp == 0 { 67 s.stars = s.stars[1:] 68 } else if tmp == dynamic { 69 s.stars = s.stars[:tmp] 70 } else { 71 s.stars = append(s.stars[0:idx[i]-1], s.stars[idx[i]:]...) 72 } 73 dynamic-- 74 } 75 } 76 77 var st *starsMgr = NewStarsMgr()