/* * * * Copyright (C) 2019 Amit Shekhar * * Copyright (C) 2011 Android Open Source Project * * * * Licensed under the Apache License, Version 2.0 (the "License"); * * you may not use this file except in compliance with the License. * * You may obtain a copy of the License at * * * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an "AS IS" BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * */ package com.amitshekhar.server; /** * Created by amitshekhar on 15/11/16. */ import android.arch.persistence.db.SupportSQLiteDatabase; import android.content.Context; import android.util.Pair; import com.amitshekhar.sqlite.DBFactory; import com.basic.security.manager.DatabaseManager; import java.io.File; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.HashMap; public class ClientServer implements Runnable { private static final String TAG = "ClientServer"; private final int mPort; private final RequestHandler mRequestHandler; private boolean mIsRunning; private ServerSocket mServerSocket; public ClientServer(Context context, int port, DBFactory dbFactory) { mRequestHandler = new RequestHandler(context, dbFactory); mPort = port; } public void start() { mIsRunning = true; new Thread(this).start(); } public void stop() { try { mIsRunning = false; if (null != mServerSocket) { mServerSocket.close(); mServerSocket = null; } } catch (Exception e) { System1.out.println("ClientServer.stop " + e.getMessage()); } } public void run() { try { mServerSocket = new ServerSocket(mPort); while (mIsRunning) { Socket socket = mServerSocket.accept(); DatabaseManager.databaseExecSqlLock.lock(); mRequestHandler.handle(socket); DatabaseManager.databaseExecSqlLock.unlock(); socket.close(); } } catch (SocketException e) { // The server was stopped; ignore. } catch (IOException e) { System1.out.println("ClientServer.run " + e.getMessage()); } catch (Exception ignore) { System1.out.println("ClientServer.run " + ignore.getMessage()); } } public void setCustomDatabaseFiles(HashMap> customDatabaseFiles) { mRequestHandler.setCustomDatabaseFiles(customDatabaseFiles); } public void setInMemoryRoomDatabases(HashMap databases) { mRequestHandler.setInMemoryRoomDatabases(databases); } public boolean isRunning() { return mIsRunning; } }