Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
R
railgun-routing-client
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Railgun
railgun-routing-client
Commits
1493ed25
Commit
1493ed25
authored
Jan 06, 2026
by
nanamicat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
time
parent
2f63dc93
Pipeline
#42444
passed with stages
in 45 seconds
Changes
3
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
13 additions
and
15 deletions
+13
-15
src/main.rs
src/main.rs
+3
-3
src/router.rs
src/router.rs
+9
-10
src/settings.rs
src/settings.rs
+1
-2
No files found.
src/main.rs
View file @
1493ed25
...
@@ -3,7 +3,7 @@ use crate::data::Router as RouterData;
...
@@ -3,7 +3,7 @@ use crate::data::Router as RouterData;
use
crate
::
protocol
::{
Hello
,
MessageType
,
Uplink
};
use
crate
::
protocol
::{
Hello
,
MessageType
,
Uplink
};
use
crate
::
router
::
Router
;
use
crate
::
router
::
Router
;
use
crate
::
server
::
Server
;
use
crate
::
server
::
Server
;
use
crate
::
settings
::{
Settings
,
INTERVAL
,
LEARN
};
use
crate
::
settings
::{
Settings
,
INTERVAL
,
WINDOW
};
use
config
::
Config
;
use
config
::
Config
;
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
BTreeMap
;
use
std
::
fs
;
use
std
::
fs
;
...
@@ -85,10 +85,10 @@ async fn main() -> anyhow::Result<()> {
...
@@ -85,10 +85,10 @@ async fn main() -> anyhow::Result<()> {
id
:
config
.id
,
id
:
config
.id
,
action
:
if
server
.online
{
MessageType
::
Update
}
else
{
MessageType
::
Query
},
action
:
if
server
.online
{
MessageType
::
Update
}
else
{
MessageType
::
Query
},
version
:
server
.version
,
version
:
server
.version
,
peers
:
if
now
.duration_since
(
start
)
<
LEARN
{
Default
::
default
()
}
else
{
connections
peers
:
if
now
.duration_since
(
start
)
<
INTERVAL
*
WINDOW
{
Default
::
default
()
}
else
{
connections
.iter
()
.iter
()
.filter
(|(
_
,
to
)|
to
.contains_key
(
&
config
.id
))
.filter
(|(
_
,
to
)|
to
.contains_key
(
&
config
.id
))
.map
(|(
from
,
_
)|
routers
.get_mut
(
from
)
.unwrap
()
.update
(
now
,
start
))
.map
(|(
from
,
_
)|
routers
.get_mut
(
from
)
.unwrap
()
.update
(
now
))
.collect
()},
.collect
()},
via
:
Default
::
default
(),
via
:
Default
::
default
(),
plan
:
Default
::
default
()
plan
:
Default
::
default
()
...
...
src/router.rs
View file @
1493ed25
use
crate
::
data
::
Router
as
RouterData
;
use
crate
::
data
::
Router
as
RouterData
;
use
crate
::
protocol
::{
Hello
,
PeerQuality
};
use
crate
::
protocol
::{
Hello
,
PeerQuality
};
use
crate
::
settings
::{
Settings
,
INTERVAL
};
use
crate
::
settings
::{
Settings
,
INTERVAL
,
WINDOW
};
use
saturating_cast
::
SaturatingCast
;
use
saturating_cast
::
SaturatingCast
;
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
BTreeMap
;
use
std
::
net
::{
IpAddr
,
Ipv4Addr
,
SocketAddr
};
use
std
::
net
::{
IpAddr
,
Ipv4Addr
,
SocketAddr
};
...
@@ -44,13 +44,15 @@ impl Router {
...
@@ -44,13 +44,15 @@ impl Router {
pub
fn
on_message
(
&
mut
self
,
data
:
&
Hello
)
{
pub
fn
on_message
(
&
mut
self
,
data
:
&
Hello
)
{
let
delta
=
(
data
.time
.wrapping_sub
(
self
.remote_time
)
as
i32
as
f32
/
INTERVAL
.as_millis
()
as
f32
)
.round
()
as
i32
;
let
delta
=
(
data
.time
.wrapping_sub
(
self
.remote_time
)
as
i32
as
f32
/
INTERVAL
.as_millis
()
as
f32
)
.round
()
as
i32
;
const
WINDOW_MAX
:
i32
=
WINDOW
as
i32
;
const
WINDOW_MIN
:
i32
=
1
-
WINDOW_MAX
;
match
delta
{
match
delta
{
-
63
..=-
1
=>
{
WINDOW_MIN
..
0
=>
{
self
.receive
|
=
1
<<
(
-
delta
);
self
.receive
|
=
1
<<
(
-
delta
);
return
;
return
;
}
}
0
=>
return
,
0
=>
return
,
1
..
=
63
=>
{
1
..
WINDOW_MAX
=>
{
self
.receive
=
(
self
.receive
<<
delta
)
|
1
;
self
.receive
=
(
self
.receive
<<
delta
)
|
1
;
self
.remote_time
=
data
.time
;
self
.remote_time
=
data
.time
;
self
.local_time
=
Instant
::
now
();
self
.local_time
=
Instant
::
now
();
...
@@ -71,21 +73,18 @@ impl Router {
...
@@ -71,21 +73,18 @@ impl Router {
self
.prev_delay
=
delay
;
self
.prev_delay
=
delay
;
}
}
pub
(
crate
)
fn
update
(
&
mut
self
,
now
:
Instant
,
start
:
Instant
)
->
PeerQuality
{
pub
(
crate
)
fn
update
(
&
mut
self
,
now
:
Instant
)
->
PeerQuality
{
let
reliability
=
self
.receive
.count_ones
()
as
u8
;
let
reliability
=
self
.receive
.count_ones
()
as
u8
;
if
reliability
>
0
{
if
reliability
>
0
{
let
max
=
now
.duration_since
(
start
)
.div_duration_f32
(
INTERVAL
)
as
u32
;
let
duration
=
now
.duration_since
(
self
.local_time
)
.div_duration_f32
(
INTERVAL
)
as
u8
;
let
reliability
=
if
max
<
64
{
(
reliability
as
u32
*
64
/
max
)
as
u8
}
else
{
reliability
};
if
duration
>
WINDOW
as
u8
{
let
duration
=
now
.duration_since
(
self
.local_time
)
.div_duration_f32
(
INTERVAL
)
as
u32
;
if
duration
>
64
{
self
.receive
=
0
;
self
.receive
=
0
;
Default
::
default
()
Default
::
default
()
}
else
{
}
else
{
PeerQuality
{
PeerQuality
{
delay
:
self
.delay
.saturating_cast
(),
delay
:
self
.delay
.saturating_cast
(),
jitter
:
self
.jitter
.saturating_cast
(),
jitter
:
self
.jitter
.saturating_cast
(),
reliability
:
reliability
.saturating_sub
((
duration
as
u8
)
.saturating_sub
(
1
)),
reliability
:
reliability
.saturating_sub
((
duration
)
.saturating_sub
(
1
)),
}
}
}
}
}
else
{
}
else
{
...
...
src/settings.rs
View file @
1493ed25
...
@@ -43,7 +43,6 @@ impl Endpoint {
...
@@ -43,7 +43,6 @@ impl Endpoint {
Ok
(
SocketAddr
::
new
(
ip
,
self
.port
))
Ok
(
SocketAddr
::
new
(
ip
,
self
.port
))
}
}
}
}
pub
const
WINDOW
:
u32
=
64
;
pub
const
INTERVAL
:
Duration
=
Duration
::
from_secs
(
1
);
pub
const
INTERVAL
:
Duration
=
Duration
::
from_secs
(
1
);
pub
const
LEARN
:
Duration
=
Duration
::
from_secs
(
10
);
pub
const
ROUTE_PROTOCOL
:
RouteProtocol
=
RouteProtocol
::
Other
(
252
);
pub
const
ROUTE_PROTOCOL
:
RouteProtocol
=
RouteProtocol
::
Other
(
252
);
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