亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcpserver.java

?? 非常棒的java數據庫
?? JAVA
字號:
/*
 * Copyright 2004-2008 H2 Group. Licensed under the H2 License, Version 1.0
 * (http://h2database.com/html/license.html).
 * Initial Developer: H2 Group
 */
package org.h2.server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

import org.h2.Driver;
import org.h2.engine.Constants;
import org.h2.message.Message;
import org.h2.message.TraceSystem;
import org.h2.util.JdbcUtils;
import org.h2.util.MathUtils;
import org.h2.util.NetUtils;

/**
 * The TCP server implements the native H2 database server protocol.
 * It supports multiple client connections to multiple databases
 * (many to many). The same database may be opened by multiple clients.
 * Also supported is the mixed mode: opening databases in embedded mode,
 * and at the same time start a TCP server to allow clients to connect to
 * the same database over the network.
 */
public class TcpServer implements Service {

    // TODO new feature: implement automatic client / server mode if 'socket'
    // file locking is used
    // TODO better exception message if the port is already in use, maybe
    // automatically use the next free port?

    public static final int DEFAULT_PORT = 9092;
    private static final int SHUTDOWN_NORMAL = 0;
    private static final int SHUTDOWN_FORCE = 1;
    public static boolean logInternalErrors;

    private int port;
    private boolean log;
    private boolean ssl;
    private boolean stop;
    private ServerSocket serverSocket;
    private Set running = Collections.synchronizedSet(new HashSet());
    private String baseDir;
    private String url;
    private boolean allowOthers;
    private boolean ifExists;
    private Connection managementDb;
    private PreparedStatement managementDbAdd;
    private PreparedStatement managementDbRemove;
    private String managementPassword = "";
    private static final Map SERVERS = Collections.synchronizedMap(new HashMap());
    private Thread listenerThread;
    private int nextThreadId;

    /**
     * Get the database name of the management database.
     * The management database contains a table with active sessions (SESSIONS).
     *
     * @param port the TCP server port
     * @return the database name (usually starting with mem:)
     */
    public static String getManagementDbName(int port) {
        return "mem:" + Constants.MANAGEMENT_DB_PREFIX + port;
    }

    private void initManagementDb() throws SQLException {
        Properties prop = new Properties();
        prop.setProperty("user", "sa");
        prop.setProperty("password", managementPassword);
        // avoid using the driver manager
        Connection conn = Driver.load().connect("jdbc:h2:" + getManagementDbName(port), prop);
        managementDb = conn;
        Statement stat = null;
        try {
            stat = conn.createStatement();
            stat.execute("CREATE ALIAS IF NOT EXISTS STOP_SERVER FOR \"" + TcpServer.class.getName() + ".stopServer\"");
            stat.execute("CREATE TABLE IF NOT EXISTS SESSIONS(ID INT PRIMARY KEY, URL VARCHAR, USER VARCHAR, CONNECTED TIMESTAMP)");
            managementDbAdd = conn.prepareStatement("INSERT INTO SESSIONS VALUES(?, ?, ?, NOW())");
            managementDbRemove = conn.prepareStatement("DELETE FROM SESSIONS WHERE ID=?");
        } finally {
            JdbcUtils.closeSilently(stat);
        }
        SERVERS.put("" + port, this);
    }

    /**
     * Get the list of ports of all running TCP server.
     *
     * @return the list of ports
     */
    public static int[] getAllServerPorts() {
        Object[] servers = SERVERS.keySet().toArray();
        int[] ports = new int[servers.length];
        for (int i = 0; i < servers.length; i++) {
            ports[i] = Integer.parseInt(servers[i].toString());
        }
        return ports;
    }

    synchronized void addConnection(int id, String url, String user) {
        try {
            managementDbAdd.setInt(1, id);
            managementDbAdd.setString(2, url);
            managementDbAdd.setString(3, user);
            managementDbAdd.execute();
        } catch (SQLException e) {
            TraceSystem.traceThrowable(e);
        }
    }

    synchronized void removeConnection(int id) {
        try {
            managementDbRemove.setInt(1, id);
            managementDbRemove.execute();
        } catch (SQLException e) {
            TraceSystem.traceThrowable(e);
        }
    }

    private synchronized void stopManagementDb() {
        if (managementDb != null) {
            try {
                managementDb.close();
            } catch (SQLException e) {
                TraceSystem.traceThrowable(e);
            }
            managementDb = null;
        }
    }

    public void init(String[] args) throws Exception {
        port = DEFAULT_PORT;
        for (int i = 0; i < args.length; i++) {
            String a = args[i];
            if ("-log".equals(a)) {
                log = Boolean.valueOf(args[++i]).booleanValue();
            } else if ("-tcpSSL".equals(a)) {
                ssl = Boolean.valueOf(args[++i]).booleanValue();
            } else if ("-tcpPort".equals(a)) {
                port = MathUtils.decodeInt(args[++i]);
            } else if ("-tcpPassword".equals(a)) {
                managementPassword = args[++i];
            } else if ("-baseDir".equals(a)) {
                baseDir = args[++i];
            } else if ("-tcpAllowOthers".equals(a)) {
                allowOthers = Boolean.valueOf(args[++i]).booleanValue();
            } else if ("-ifExists".equals(a)) {
                ifExists = Boolean.valueOf(args[++i]).booleanValue();
            }
        }
        org.h2.Driver.load();
        url = (ssl ? "ssl" : "tcp") + "://" + NetUtils.getLocalAddress() + ":" + port;
    }

    public String getURL() {
        return url;
    }

    boolean allow(Socket socket) {
        if (allowOthers) {
            return true;
        }
        return NetUtils.isLoopbackAddress(socket);
    }

    public synchronized void start() throws SQLException {
        serverSocket = NetUtils.createServerSocket(port, ssl);
        initManagementDb();
    }

    public void listen() {
        listenerThread = Thread.currentThread();
        String threadName = listenerThread.getName();
        try {
            while (!stop) {
                Socket s = serverSocket.accept();
                TcpServerThread c = new TcpServerThread(s, this, nextThreadId++);
                running.add(c);
                Thread thread = new Thread(c);
                thread.setName(threadName + " thread");
                c.setThread(thread);
                thread.start();
            }
            serverSocket = NetUtils.closeSilently(serverSocket);
        } catch (Exception e) {
            if (!stop) {
                TraceSystem.traceThrowable(e);
            }
        }
        stopManagementDb();
    }

    public synchronized boolean isRunning() {
        if (serverSocket == null) {
            return false;
        }
        try {
            Socket s = NetUtils.createLoopbackSocket(port, ssl);
            s.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public void stop() {
        // TODO server: share code between web and tcp servers
        // need to remove the server first, otherwise the connection is broken
        // while the server is still registered in this map
        SERVERS.remove("" + port);
        if (!stop) {
            stopManagementDb();
            stop = true;
            if (serverSocket != null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    TraceSystem.traceThrowable(e);
                }
                serverSocket = null;
            }
            if (listenerThread != null) {
                try {
                    listenerThread.join(1000);
                } catch (InterruptedException e) {
                    TraceSystem.traceThrowable(e);
                }
            }
        }
        // TODO server: using a boolean 'now' argument? a timeout?
        ArrayList list = new ArrayList(running);
        for (int i = 0; i < list.size(); i++) {
            TcpServerThread c = (TcpServerThread) list.get(i);
            if (c != null) {
                c.close();
                try {
                    c.getThread().join(100);
                } catch (Exception e) {
                    TraceSystem.traceThrowable(e);
                }
            }
        }
    }

    public static void stopServer(int port, String password, int shutdownMode) {
        TcpServer server = (TcpServer) SERVERS.get("" + port);
        if (server == null) {
            return;
        }
        if (!server.managementPassword.equals(password)) {
            return;
        }
        if (shutdownMode == SHUTDOWN_NORMAL) {
            server.stopManagementDb();
            server.stop = true;
            try {
                Socket s = NetUtils.createLoopbackSocket(port, false);
                s.close();
            } catch (Exception e) {
                // try to connect - so that accept returns
            }
        } else if (shutdownMode == SHUTDOWN_FORCE) {
            server.stop();
        }
    }

    void remove(TcpServerThread t) {
        running.remove(t);
    }

    String getBaseDir() {
        return baseDir;
    }

    void log(String s) {
        // TODO log: need concept for server log
        if (log) {
            System.out.println(s);
        }
    }

    void logError(Throwable e) {
        if (log) {
            e.printStackTrace();
        }
    }

    public boolean getAllowOthers() {
        return allowOthers;
    }

    public String getType() {
        return "TCP";
    }

    public String getName() {
        return "H2 TCP Server";
    }

    public void logInternalError(String string) {
        if (logInternalErrors) {
            System.out.println(string);
            new Error(string).printStackTrace();
        }
    }

    public boolean getIfExists() {
        return ifExists;
    }

    public static synchronized void shutdown(String url, String password, boolean force) throws SQLException {
        int port = Constants.DEFAULT_SERVER_PORT;
        int idx = url.indexOf(':', "jdbc:h2:".length());
        if (idx >= 0) {
            String p = url.substring(idx + 1);
            idx = p.indexOf('/');
            if (idx >= 0) {
                p = p.substring(0, idx);
            }
            port = MathUtils.decodeInt(p);
        }
        String db = getManagementDbName(port);
        try {
            org.h2.Driver.load();
        } catch (Throwable e) {
            throw Message.convert(e);
        }
        for (int i = 0; i < 2; i++) {
            Connection conn = null;
            PreparedStatement prep = null;
            try {
                conn = DriverManager.getConnection("jdbc:h2:" + url + "/" + db, "sa", password);
                prep = conn.prepareStatement("CALL STOP_SERVER(?, ?, ?)");
                prep.setInt(1, port);
                prep.setString(2, password);
                prep.setInt(3, force ? SHUTDOWN_FORCE : SHUTDOWN_NORMAL);
                try {
                    prep.execute();
                } catch (SQLException e) {
                    if (force) {
                        // ignore
                    } else {
                        throw e;
                    }
                }
                break;
            } catch (SQLException e) {
                if (i == 1) {
                    throw e;
                }
            } finally {
                JdbcUtils.closeSilently(prep);
                JdbcUtils.closeSilently(conn);
            }
        }
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级三级| 图片区小说区区亚洲影院| 国产一区二区三区在线观看免费视频| 欧美精品日韩综合在线| 亚洲va欧美va人人爽| 欧美人xxxx| 精品亚洲porn| 国产欧美日产一区| 精品综合久久久久久8888| 91精品国产综合久久久蜜臀粉嫩 | 综合久久久久久| 成人国产精品免费观看动漫| 亚洲欧美日韩精品久久久久| 欧美在线免费观看视频| 日日夜夜免费精品| 国产亚洲欧美日韩在线一区| 91美女福利视频| 日本成人在线不卡视频| 久久精品视频一区二区三区| 色综合久久天天| 免费观看成人鲁鲁鲁鲁鲁视频| 2020国产精品| 91麻豆国产精品久久| 香蕉乱码成人久久天堂爱免费| 精品免费国产二区三区| 99精品欧美一区| 午夜精品国产更新| 欧美激情一区在线| 欧美精品久久99久久在免费线| 国产一区二区免费在线| 洋洋av久久久久久久一区| 精品免费视频一区二区| 91美女精品福利| 韩国毛片一区二区三区| 综合亚洲深深色噜噜狠狠网站| 欧美伦理视频网站| 成人黄色电影在线| 久久不见久久见免费视频7| 亚洲欧洲在线观看av| 日韩美女在线视频| 在线观看不卡视频| 成人一区在线看| 麻豆91在线看| 亚洲国产精品久久久男人的天堂 | 欧美精品tushy高清| 成人在线视频一区| 麻豆精品一二三| 亚洲一本大道在线| 亚洲欧洲制服丝袜| 日本一二三四高清不卡| 日韩免费福利电影在线观看| 欧美日韩一区精品| 91免费观看在线| 国产99久久久国产精品免费看| 日本91福利区| 亚洲成人综合在线| 一区二区三区精品视频在线| 欧美激情在线免费观看| 精品国产伦一区二区三区免费| 欧美精选在线播放| 在线观看欧美黄色| 色吊一区二区三区| 99精品欧美一区| 99久久伊人久久99| 成人国产亚洲欧美成人综合网| 激情综合网激情| 蜜臀精品一区二区三区在线观看 | 成人免费视频在线观看| 久久精品一区二区三区不卡| 精品国产亚洲在线| 精品女同一区二区| 欧美电影免费观看高清完整版在线观看 | 亚洲精品亚洲人成人网| 国产精品美女久久久久av爽李琼| 久久人人爽爽爽人久久久| 日韩精品一区二区三区视频播放| 亚洲人成伊人成综合网小说| 国产综合色产在线精品| 午夜精品久久久久久久久久久 | 国产精品美女久久久久aⅴ| 久久只精品国产| 久久影院电视剧免费观看| 欧美成人vps| 欧美va亚洲va国产综合| 精品国产乱码久久久久久蜜臀| 欧美一区二区福利在线| 精品日产卡一卡二卡麻豆| 精品欧美一区二区在线观看| 精品国产伦一区二区三区免费 | 国产亚洲成年网址在线观看| 久久久欧美精品sm网站| 欧美国产日产图区| 国产精品久久久久一区| 亚洲欧美一区二区不卡| 亚洲线精品一区二区三区八戒| 一区二区三区在线免费观看 | 香蕉久久夜色精品国产使用方法| 国产综合久久久久久鬼色| 国产精品国产三级国产普通话蜜臀 | 国产亚洲自拍一区| 中文字幕精品一区二区三区精品| 日本一区二区三区久久久久久久久不| 国产精品色哟哟| 亚洲自拍偷拍综合| 日本vs亚洲vs韩国一区三区 | 国产精品污网站| 中文字幕视频一区| 亚洲国产裸拍裸体视频在线观看乱了| 午夜精品久久久| 国产麻豆精品视频| 色婷婷精品大在线视频 | 久久综合资源网| 国产午夜精品一区二区三区四区| 中文字幕一区二区三| 亚洲电影你懂得| 国产精品一区二区你懂的| 日本高清不卡在线观看| 日韩免费视频一区| 国产精品久久久久影视| 日韩激情av在线| gogo大胆日本视频一区| 欧美一区二区精品久久911| 国产精品麻豆视频| 三级成人在线视频| 成人午夜av电影| 欧美一区三区二区| 亚洲男人的天堂在线aⅴ视频| 蜜臀av性久久久久蜜臀av麻豆| 99久久er热在这里只有精品66| 欧美丰满少妇xxxxx高潮对白 | 99在线精品观看| 日韩精品资源二区在线| 亚洲欧美电影院| 国产精品香蕉一区二区三区| 欧美精选一区二区| 日韩毛片在线免费观看| 国模一区二区三区白浆| 欧美日韩国产另类一区| 最新国产の精品合集bt伙计| 国模少妇一区二区三区| 欧美人成免费网站| 亚洲色大成网站www久久九九| 国产麻豆精品95视频| 在线观看91av| 亚洲一区二区免费视频| 三级欧美韩日大片在线看| 91亚洲精品乱码久久久久久蜜桃| 欧美一区二区免费| 亚洲激情图片qvod| 丁香婷婷综合五月| 欧美大肚乱孕交hd孕妇| 五月婷婷激情综合网| 色婷婷av一区二区三区gif| 国产无遮挡一区二区三区毛片日本| 日日欢夜夜爽一区| 欧美视频一区在线观看| 国产精品乱人伦一区二区| 国内精品免费在线观看| 日韩午夜电影在线观看| 日韩在线a电影| 欧美日韩一区二区在线观看| 亚洲视频一区二区在线观看| 成人教育av在线| 中文字幕国产一区二区| 国产大片一区二区| 国产欧美一区视频| 国产成人精品综合在线观看| 久久女同精品一区二区| 国产精品一区二区在线播放| 久久久久97国产精华液好用吗| 久久成人18免费观看| 精品少妇一区二区三区日产乱码 | 中文字幕一区在线观看视频| 国产高清一区日本| 国产日韩欧美a| 成人免费福利片| 成人免费一区二区三区在线观看| 99久久99久久精品免费看蜜桃| 亚洲色图视频免费播放| 在线免费av一区| 日韩电影免费在线| 精品粉嫩超白一线天av| 国产精品自拍三区| 国产精品美日韩| 91国在线观看| 日韩电影网1区2区| 久久久综合精品| 成人福利视频网站| 一区二区在线看| 正在播放亚洲一区| 国产麻豆精品视频| 亚洲欧洲性图库| 欧美日韩精品电影| 久久99国产精品久久99果冻传媒| 国产欧美日韩亚州综合| 91麻豆成人久久精品二区三区| 亚洲成人午夜电影| 久久欧美一区二区| 91久久香蕉国产日韩欧美9色| 亚洲国产成人av|