Commit 90f65d18 authored by 神楽坂玲奈's avatar 神楽坂玲奈 Committed by 铃兰

rename

parent ff86a96a
Pipeline #16077 passed with stages
in 54 seconds
...@@ -7,22 +7,22 @@ export interface PeerQuality { ...@@ -7,22 +7,22 @@ export interface PeerQuality {
} }
// 路由器向中心服务器发送的消息 // 路由器向中心服务器发送的消息
export interface UploadMessage { export interface Report {
id: number; // router id id: number;
ack: number; ack: number;
peers?: Record<number, PeerQuality>; peers?: Record<number, PeerQuality>;
} }
// 中心服务器向路由器发送的消息 // 中心服务器向路由器发送的消息
export interface DownloadMessage { export interface Change {
seq: number, seq: number,
via: Record<number, number>, via: Record<number, number>,
plan: Record<number, number> // plan: Record<number, number>
} }
// 路由器向路由器发送的消息 // 路由器向路由器发送的消息
export interface PeerMessage { export interface Hello {
id: number; id: number; // 自己的id
seq: number; seq: number; // 这个报文的顺序号,每次发送自增
time: number; time: number; // 自己的系统时间,EPOCH 以来的毫秒数
} }
import * as _ from 'lodash'; import * as _ from 'lodash';
import config from '../config/config.json'; import config from '../config/config.json';
import { PeerMessage, PeerQuality } from '../protocol'; import { Hello, PeerQuality } from '../protocol';
export interface RouterConfig { export interface RouterConfig {
id: number; id: number;
...@@ -8,7 +8,7 @@ export interface RouterConfig { ...@@ -8,7 +8,7 @@ export interface RouterConfig {
subnets: string[]; subnets: string[];
} }
export class Peer implements PeerMessage, PeerQuality, RouterConfig { export class Peer implements Hello, PeerQuality, RouterConfig {
id: number; id: number;
address: string; address: string;
subnets: string[]; subnets: string[];
...@@ -33,7 +33,7 @@ export class Peer implements PeerMessage, PeerQuality, RouterConfig { ...@@ -33,7 +33,7 @@ export class Peer implements PeerMessage, PeerQuality, RouterConfig {
this.history = []; this.history = [];
} }
onMessage(data: PeerMessage) { onMessage(data: Hello) {
// console.log(data); // console.log(data);
if (data.seq === 0 || data.seq < this.seq - config.timeout || data.seq > this.seq + config.timeout) { if (data.seq === 0 || data.seq < this.seq - config.timeout || data.seq > this.seq + config.timeout) {
// 收到 seq = 0 或 seq 与之前差距较大,就 reset // 收到 seq = 0 或 seq 与之前差距较大,就 reset
......
...@@ -4,12 +4,12 @@ import config from '../config/config.json'; ...@@ -4,12 +4,12 @@ import config from '../config/config.json';
import { RouteWriter } from './RouteWriter'; import { RouteWriter } from './RouteWriter';
import { Peer } from './Peer'; import { Peer } from './Peer';
import { DownloadMessage, PeerMessage, UploadMessage } from '../protocol'; import { Change, Hello, Report } from '../protocol';
export class Server { export class Server {
ack = 0; ack = 0;
onMessage(socket: Socket, message: DownloadMessage, self: PeerMessage) { onMessage(socket: Socket, message: Change, self: Hello) {
if (message.seq && this.ack !== message.seq) { if (message.seq && this.ack !== message.seq) {
console.log('seq mismatch rejected'); console.log('seq mismatch rejected');
return; return;
...@@ -22,13 +22,13 @@ export class Server { ...@@ -22,13 +22,13 @@ export class Server {
for (const [to, via] of Object.entries(message.via)) { for (const [to, via] of Object.entries(message.via)) {
RouteWriter.setVia(parseInt(to), via); RouteWriter.setVia(parseInt(to), via);
} }
for (const [plan, to] of Object.entries(message.plan)) { // for (const [plan, to] of Object.entries(message.plan)) {
RouteWriter.setVia(parseInt(plan), to); // RouteWriter.setVia(parseInt(plan), to);
} // }
RouteWriter.commit(); RouteWriter.commit();
this.ack = message.seq + 1; this.ack = message.seq + 1;
const response: UploadMessage = { const response: Report = {
id: self.id, id: self.id,
ack: this.ack ack: this.ack
}; };
...@@ -36,8 +36,8 @@ export class Server { ...@@ -36,8 +36,8 @@ export class Server {
socket.send(JSON.stringify(response), config.server_port, config.server_address); socket.send(JSON.stringify(response), config.server_port, config.server_address);
} }
update(socket: Socket, self: PeerMessage, peers: Peer[]) { update(socket: Socket, self: Hello, peers: Peer[]) {
const message: UploadMessage = { const message: Report = {
id: self.id, id: self.id,
ack: this.ack, ack: this.ack,
peers: Object.fromEntries(peers.map(peer => [peer.id, peer.update(self.time)])) peers: Object.fromEntries(peers.map(peer => [peer.id, peer.update(self.time)]))
......
...@@ -4,9 +4,9 @@ import config from '../config/config.json'; ...@@ -4,9 +4,9 @@ import config from '../config/config.json';
import routers from '../config/routers.json'; import routers from '../config/routers.json';
import { Server } from './Server'; import { Server } from './Server';
import { Peer } from './Peer'; import { Peer } from './Peer';
import { DownloadMessage, PeerMessage } from '../protocol'; import { Change, Hello } from '../protocol';
const self: PeerMessage = { id: parseInt(process.env.RAILGUN_ID), seq: 0, time: 0 }; const self: Hello = { id: parseInt(process.env.RAILGUN_ID), seq: 0, time: 0 };
const server = new Server(); const server = new Server();
const peers = routers.filter(r => r.id !== self.id && r.interface).map(r => new Peer(r)); const peers = routers.filter(r => r.id !== self.id && r.interface).map(r => new Peer(r));
...@@ -20,11 +20,11 @@ const socket = dgram ...@@ -20,11 +20,11 @@ const socket = dgram
try { try {
if (rinfo.address === config.server_address && rinfo.port === config.server_port) { if (rinfo.address === config.server_address && rinfo.port === config.server_port) {
// from server // from server
const message: DownloadMessage = JSON.parse(msg.toString()); const message: Change = JSON.parse(msg.toString());
server.onMessage(socket, message, self); server.onMessage(socket, message, self);
} else { } else {
// from client // from client
const message: PeerMessage = JSON.parse(msg.toString()); const message: Hello = JSON.parse(msg.toString());
assert(message.id); assert(message.id);
const peer = peers.find(p => p.id === message.id); const peer = peers.find(p => p.id === message.id);
// assert(peer && rinfo.address === `10.200.${self.id}.${peer.id}` && rinfo.port === config.port); // assert(peer && rinfo.address === `10.200.${self.id}.${peer.id}` && rinfo.port === config.port);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment