All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.redkale.boot.NodeSncpServer Maven / Gradle / Ivy

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.redkale.boot;

import java.lang.reflect.Modifier;
import java.net.*;
import java.util.*;
import java.util.logging.Level;
import org.redkale.boot.ClassFilter.FilterEntry;
import org.redkale.net.*;
import org.redkale.net.sncp.*;
import org.redkale.service.Service;
import org.redkale.util.*;
import org.redkale.util.AnyValue.DefaultAnyValue;

/**
 * SNCP Server节点的配置Server
 *
 * 

* 详情见: https://redkale.org * * @author zhangjx */ @NodeProtocol({"SNCP"}) public class NodeSncpServer extends NodeServer { protected final SncpServer sncpServer; private NodeSncpServer(Application application, AnyValue serconf) { super(application, createServer(application, serconf)); this.sncpServer = (SncpServer) this.server; this.consumer = sncpServer == null ? null : x -> sncpServer.addSncpServlet(x); } public static NodeServer createNodeServer(Application application, AnyValue serconf) { if (serconf != null && serconf.getAnyValue("rest") != null) { ((AnyValue.DefaultAnyValue) serconf).addValue("_$sncp", "true"); return new NodeHttpServer(application, serconf); } return new NodeSncpServer(application, serconf); } private static Server createServer(Application application, AnyValue serconf) { return new SncpServer(application.getStartTime(), application.getResourceFactory().createChild()); } @Override public InetSocketAddress getSocketAddress() { return sncpServer == null ? null : sncpServer.getSocketAddress(); } public void consumerAccept(Service service) { if (this.consumer != null) this.consumer.accept(service); } @Override public void init(AnyValue config) throws Exception { super.init(config); //------------------------------------------------------------------- if (sncpServer == null) return; //调试时server才可能为null final StringBuilder sb = logger.isLoggable(Level.FINE) ? new StringBuilder() : null; final String threadName = "[" + Thread.currentThread().getName() + "] "; List servlets = sncpServer.getSncpServlets(); Collections.sort(servlets); for (SncpServlet en : servlets) { if (sb != null) sb.append(threadName).append(" Load ").append(en).append(LINE_SEPARATOR); } if (sb != null && sb.length() > 0) logger.log(Level.FINE, sb.toString()); } @Override public boolean isSNCP() { return true; } public SncpServer getSncpServer() { return sncpServer; } @Override protected void loadFilter(ClassFilter filterFilter, ClassFilter otherFilter) throws Exception { if (sncpServer != null) loadSncpFilter(this.serverConf.getAnyValue("fliters"), filterFilter); } @SuppressWarnings("unchecked") protected void loadSncpFilter(final AnyValue servletsConf, final ClassFilter classFilter) throws Exception { final StringBuilder sb = logger.isLoggable(Level.INFO) ? new StringBuilder() : null; final String threadName = "[" + Thread.currentThread().getName() + "] "; List> list = new ArrayList(classFilter.getFilterEntrys()); for (FilterEntry en : list) { Class clazz = (Class) en.getType(); if (Modifier.isAbstract(clazz.getModifiers())) continue; final SncpFilter filter = clazz.getDeclaredConstructor().newInstance(); resourceFactory.inject(filter, this); DefaultAnyValue filterConf = (DefaultAnyValue) en.getProperty(); this.sncpServer.addSncpFilter(filter, filterConf); if (sb != null) sb.append(threadName).append(" Load ").append(clazz.getName()).append(LINE_SEPARATOR); } if (sb != null && sb.length() > 0) logger.log(Level.INFO, sb.toString()); } @Override protected void loadServlet(ClassFilter servletFilter, ClassFilter otherFilter) throws Exception { } @Override @SuppressWarnings("unchecked") protected ClassFilter createFilterClassFilter() { return createClassFilter(null, null, SncpFilter.class, new Class[]{org.redkale.watch.WatchFilter.class}, null, "filters", "filter"); } @Override protected ClassFilter createServletClassFilter() { return null; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy