import * as crc from 'crc'; import { pinus } from 'pinus'; interface ServerInfo { id: string; serverType: string; host: string; port: number; clientHost?: string; clientPort?: number; frontend ?: boolean; args ?: string | string[]; cpu ?: number; } export function dispatch(uid: string, connectors: ServerInfo[], serverType: string = '') { let roleRoute = pinus.app.get('roleRoute'); if(!roleRoute) { pinus.app.set('roleRoute', new Map>()); roleRoute = pinus.app.get('roleRoute'); } //测试代码 // if (serverType == 'activity') { // if (uid == 'SPDtGqx9Gw') { // if (connectors.length > 1) { // connectors = connectors.filter(obj => { return obj.id != 'activity-server-1' }) // } // } else { // connectors = connectors.filter(obj => { return obj.id == 'activity-server-1' }) // } // } connectors.sort((a, b) => a.id > b.id? 1: -1); if (serverType) { let roleRouteData = roleRoute.get(uid); let serverId = ''; if (roleRouteData) { serverId = roleRouteData.get(serverType); if (serverId) { let index = connectors.findIndex(obj => { return obj.id === serverId }); if (index != -1) { // console.log('aaaaaaaaa 1', roleRouteData) return connectors[index]; } } } let index = Math.abs(crc.crc32(uid)) % connectors.length; if (!roleRouteData) { roleRouteData = new Map() } roleRouteData.set(serverType, connectors[index].id); roleRoute.set(uid, roleRouteData) // console.log('aaaaaaaaa 2', roleRouteData) return connectors[index]; } pinus.app.set('roleRoute', roleRoute); let index = Math.abs(crc.crc32(uid)) % connectors.length; return connectors[index]; }