(@Nullable Config conf, @Nullable String host, int port)
| 498 | |
| 499 | // 参数host,port优先; 如果传null/<=0则以conf为准; 如果conf也没配置则用默认值null/DEFAULT_PORT |
| 500 | public Token start(@Nullable Config conf, @Nullable String host, int port) throws Exception { |
| 501 | lock(); |
| 502 | try { |
| 503 | if (service != null) |
| 504 | return this; |
| 505 | |
| 506 | rocksdb = new RocksDatabase(PropertiesHelper.getString("token.rocksdb", "token_db")); |
| 507 | tokenMapTable = rocksdb.getOrAddTable("tokenMap"); |
| 508 | |
| 509 | tokenRefCleanerLock.lock(); |
| 510 | try { |
| 511 | if (tokenRefCleaner == null) { |
| 512 | tokenRefCleaner = new Thread(Token::cleanTokenRef, "TokenRefCleaner"); |
| 513 | tokenRefCleaner.setDaemon(true); |
| 514 | tokenRefCleaner.setPriority(Thread.MAX_PRIORITY); |
| 515 | tokenRefCleaner.start(); |
| 516 | } |
| 517 | } finally { |
| 518 | tokenRefCleanerLock.unlock(); |
| 519 | } |
| 520 | |
| 521 | ZezeCounter.tryInit(); |
| 522 | |
| 523 | service = new TokenServer(conf != null ? conf : new Config().loadAndParse()); |
| 524 | RegisterProtocols(service); |
| 525 | var sc = service.getConfig(); |
| 526 | if (sc.acceptorCount() == 0) |
| 527 | sc.addAcceptor(new Acceptor(port > 0 ? port : DEFAULT_PORT, host)); |
| 528 | else { |
| 529 | sc.forEachAcceptor2(acceptor -> { |
| 530 | if (host != null) |
| 531 | acceptor.setIp(host); |
| 532 | if (port > 0) |
| 533 | acceptor.setPort(port); |
| 534 | return false; |
| 535 | }); |
| 536 | } |
| 537 | service.start(); |
| 538 | |
| 539 | cleanTokenMapFuture = Task.scheduleUnsafe(1000, 1000, this::cleanTokenMap); |
| 540 | cleanTokenMapTableFuture = Task.scheduleAtUnsafe(3, 14, this::cleanTokenMapTable); |
| 541 | return this; |
| 542 | } finally { |
| 543 | unlock(); |
| 544 | } |
| 545 | } |
| 546 | |
| 547 | public void stop() throws Exception { |
| 548 | lock(); |
no test coverage detected