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