Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
twitter_syncer
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Odysseus
twitter_syncer
Commits
60a76edc
Commit
60a76edc
authored
Jan 12, 2025
by
vicotor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update mutex
parent
ffdab888
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
31 additions
and
12 deletions
+31
-12
swarm.go
swarm/swarm.go
+31
-12
No files found.
swarm/swarm.go
View file @
60a76edc
...
@@ -15,8 +15,10 @@ type ClientWithRateLimiter struct {
...
@@ -15,8 +15,10 @@ type ClientWithRateLimiter struct {
}
}
type
Swarm
struct
{
type
Swarm
struct
{
clients
map
[
string
]
*
ClientWithRateLimiter
clients
map
[
string
]
*
ClientWithRateLimiter
mu
sync
.
Mutex
mu
sync
.
Mutex
countmu
sync
.
Mutex
followermu
sync
.
Mutex
}
}
var
(
var
(
...
@@ -37,9 +39,20 @@ func InitSwarm(initialBees []string) (*Swarm, error) {
...
@@ -37,9 +39,20 @@ func InitSwarm(initialBees []string) (*Swarm, error) {
for
_
,
bee
:=
range
initialBees
{
for
_
,
bee
:=
range
initialBees
{
s
.
AddClient
(
bee
)
s
.
AddClient
(
bee
)
}
}
gSwarm
=
s
return
s
,
nil
return
s
,
nil
}
}
func
(
s
*
Swarm
)
copyedClients
()
map
[
string
]
*
ClientWithRateLimiter
{
s
.
mu
.
Lock
()
defer
s
.
mu
.
Unlock
()
clients
:=
make
(
map
[
string
]
*
ClientWithRateLimiter
)
for
k
,
v
:=
range
s
.
clients
{
clients
[
k
]
=
v
}
return
clients
}
func
(
s
*
Swarm
)
AddClient
(
url
string
)
{
func
(
s
*
Swarm
)
AddClient
(
url
string
)
{
s
.
mu
.
Lock
()
s
.
mu
.
Lock
()
defer
s
.
mu
.
Unlock
()
defer
s
.
mu
.
Unlock
()
...
@@ -57,26 +70,32 @@ func (s *Swarm) RemoveClient(url string) {
...
@@ -57,26 +70,32 @@ func (s *Swarm) RemoveClient(url string) {
}
}
func
(
s
*
Swarm
)
GetFollowerCount
(
userID
string
)
(
int
,
error
)
{
func
(
s
*
Swarm
)
GetFollowerCount
(
userID
string
)
(
int
,
error
)
{
s
.
mu
.
Lock
()
clients
:=
s
.
copyedClients
()
defer
s
.
mu
.
Unlock
()
s
.
countmu
.
Lock
()
defer
s
.
countmu
.
Unlock
()
for
_
,
cli
:=
range
s
.
clients
{
for
_
,
cli
:=
range
clients
{
res
,
err
:=
cli
.
GetFollowerCount
(
userID
)
res
,
err
:=
cli
.
GetFollowerCount
(
userID
)
if
err
==
nil
{
if
err
==
nil
{
fmt
.
Printf
(
"get %v follower count %d
\n
"
,
userID
,
res
.
Count
)
return
res
.
Count
,
nil
return
res
.
Count
,
nil
}
else
{
fmt
.
Println
(
"get follower count failed with err"
,
err
.
Error
())
}
}
}
}
return
0
,
fmt
.
Errorf
(
"can not get the %v follower count"
,
userID
)
return
0
,
fmt
.
Errorf
(
"can not get the %v follower count"
,
userID
)
}
}
func
(
s
*
Swarm
)
GetFollowerList
(
user
string
,
cursor
string
)
([]
*
twitter
.
UserObj
,
string
,
*
twitter
.
RateLimit
,
error
)
{
func
(
s
*
Swarm
)
GetFollowerList
(
user
string
,
cursor
string
)
([]
*
twitter
.
UserObj
,
string
,
*
twitter
.
RateLimit
,
error
)
{
s
.
mu
.
Lock
()
clients
:=
s
.
copyedClients
()
defer
s
.
mu
.
Unlock
()
for
_
,
cli
:=
range
s
.
clients
{
s
.
followermu
.
Lock
()
if
cli
.
RateLimit
.
Allow
()
==
false
{
defer
s
.
followermu
.
Unlock
()
continue
}
for
_
,
cli
:=
range
clients
{
//if cli.RateLimit.Allow() == false {
// continue
//}
res
,
err
:=
cli
.
GetFollowerList
(
user
,
cursor
)
res
,
err
:=
cli
.
GetFollowerList
(
user
,
cursor
)
if
err
==
nil
{
if
err
==
nil
{
list
:=
make
([]
*
twitter
.
UserObj
,
0
,
len
(
res
.
List
))
list
:=
make
([]
*
twitter
.
UserObj
,
0
,
len
(
res
.
List
))
...
@@ -89,7 +108,7 @@ func (s *Swarm) GetFollowerList(user string, cursor string) ([]*twitter.UserObj,
...
@@ -89,7 +108,7 @@ func (s *Swarm) GetFollowerList(user string, cursor string) ([]*twitter.UserObj,
}
}
return
list
,
res
.
Next
,
nil
,
nil
return
list
,
res
.
Next
,
nil
,
nil
}
else
{
}
else
{
fmt
.
Println
(
"get follower list failed with err"
,
err
.
Error
())
}
}
}
}
return
nil
,
""
,
nil
,
fmt
.
Errorf
(
"can not get the %v follower list"
,
user
)
return
nil
,
""
,
nil
,
fmt
.
Errorf
(
"can not get the %v follower list"
,
user
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment