📄 serverchild.java
字号:
/*ARMiner - Association Rules MinerCopyright (C) 2000 UMass/Boston - Computer Science DepartmentThis program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or (atyour option) any later version.This program is distributed in the hope that it will be useful, butWITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNUGeneral Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307USAThe ARMiner Server was written by Dana Cristofor and LaurentiuCristofor.The ARMiner Client was written by Abdelmajid Karatihy, Xiaoyong Kuang,and Lung-Tsung Li.The ARMiner package is currently maintained by Laurentiu Cristofor(laur@cs.umb.edu).*//* This file is a part of the ARMiner project. (P)1999-2000 by ARMiner Server Team: Dana Cristofor Laurentiu Cristofor*/import java.util.*;import java.io.*;import java.net.*;/* Maintenance log started on April 5th, 2001 by Laurentiu Cristofor Apr. 5th, 2001 - I have replaced the quicksort used for sorting the mining results with a heapsort implementation, which runs faster and uses less memory. This also eliminates the StackOutOfMemory problem that would appear when sorting large results - I have increased the number of results sent to the client, the BATCH_SIZE, to 5000*/ /** ServerChild.java<P> ServerChild will be responsible for the communication with a particular client.<P>*/public class ServerChild extends Thread{ private Socket clientSocket; // socket for communication with the client private ObjectInputStream in; // for reading private ObjectOutputStream out; // for writing private static long connection_sequence; // used to assign id's to // connections private long connectionID; // the connection identifier private String user = null; // user, owner of the session private DBConfig dbconf = null; // configuration object private static final int BATCH_SIZE = 5000; // max number // of association rules // to be returned private Vector results = null; // mining results are kept here private int index = 0; // next position to be returned // from results public static final int ASC = 1; // for sorting in ascending order public static final int DESC = 2; // for sorting in descending order /** * Initialize a ServerChild to communicate * through <code>clientSocket</code>. * */ public ServerChild(Socket clientSocket) { try { this.clientSocket = clientSocket; // open socket I/O streams in = new ObjectInputStream(clientSocket.getInputStream()); out = new ObjectOutputStream(clientSocket.getOutputStream()); // assign this connection an identifier connection_sequence++; if (connection_sequence < 0) connection_sequence = 0; connectionID = connection_sequence; } catch (Exception e) { log("ServerChild error: " + e); } } /** * Return this connection's identifier * */ public long getID() { return connectionID; } /** * Start the execution of the ServerChild. * */ public void run() { try { serviceClient(); Server.remove(this); clientSocket.close(); } catch (Exception e) { log("ServerChild error: " + e); } } /* * Loops over the client requests; */ private void serviceClient() { String cmmd; boolean loggedOn = false; while(true) { try { cmmd = (String)in.readObject(); log(cmmd); if (loggedOn) { if (cmmd.equals("EXIT")) { try { dbconf.unmarkLogged(user); } catch (DBConfigException e) { log(e); } break; } else if ((cmmd.equals("GETCOLS"))) { Vector dbs = (Vector)in.readObject(); log(dbs); getColumns(dbs); } else if ((cmmd.equals("GETDBCONFIG"))) getDBConfig(); else if ((cmmd.equals("BENCHMARK"))) { Vector info = (Vector)in.readObject(); log(info); benchmark((Vector)info.get(0), (Vector)info.get(1), (Vector)info.get(2)); } else if ((cmmd.equals("CHGPERM"))) { Vector info = (Vector)in.readObject(); log(info); chgPerm((String)info.get(0), ((Long)info.get(1)).longValue()); } else if ((cmmd.equals("CHGPASSW"))) { Vector info = (Vector)in.readObject(); log(info); chgPassw((String)info.get(0), (String)info.get(1)); } else if ((cmmd.equals("CHGNAMEUSR"))) { Vector info = (Vector)in.readObject(); log(info); chgNameUsr((String)info.get(0), (String)info.get(1)); } else if ((cmmd.equals("DELUSR"))) { Vector info = (Vector)in.readObject(); log(info); delUsr((String)info.get(0)); } else if ((cmmd.equals("ADDUSR"))) { Vector info = (Vector)in.readObject(); log(info); addUsr((String)info.get(0), (String)info.get(1), ((Long)info.get(2)).longValue(), (Vector)info.get(3)); } else if ((cmmd.equals("DELUSRFROMGRPS"))) { Vector info = (Vector)in.readObject(); log(info); delUsrFromGrps((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("ADDUSRTOGRPS"))) { Vector info = (Vector)in.readObject(); log(info); addUsrToGrps((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("SETUSRSFORGRP"))) { Vector info = (Vector)in.readObject(); log(info); setUsrsForGrp((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("SETGRPSFORUSR"))) { Vector info = (Vector)in.readObject(); log(info); setGrpsForUsr((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("DELGRPFROMUSRS"))) { Vector info = (Vector)in.readObject(); log(info); delGrpFromUsrs((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("ADDGRPTOUSRS"))) { Vector info = (Vector)in.readObject(); log(info); addGrpToUsrs((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("CHGNAMEGRP"))) { Vector info = (Vector)in.readObject(); log(info); chgNameGrp((String)info.get(0), (String)info.get(1)); } else if ((cmmd.equals("DELGRP"))) { Vector info = (Vector)in.readObject(); log(info); delGrp((String)info.get(0)); } else if ((cmmd.equals("ADDGRP"))) { Vector info = (Vector)in.readObject(); log(info); addGrp((String)info.get(0), (Vector)info.get(1)); } else if ((cmmd.equals("CHGALGGRP"))) { Vector info = (Vector)in.readObject(); log(info); chgAlgGrp((String)info.get(0), (String)info.get(1)); } else if ((cmmd.equals("DELALG"))) { Vector info = (Vector)in.readObject(); log(info); delAlg((String)info.get(0)); } else if ((cmmd.equals("CHGDBGRP"))) { Vector info = (Vector)in.readObject(); log(info); chgDbGrp((String)info.get(0), (String)info.get(1)); } else if ((cmmd.equals("DELDB"))) { Vector info = (Vector)in.readObject(); log(info); delDb((String)info.get(0)); } else if ((cmmd.equals("ADDDB"))) { Vector info = (Vector)in.readObject(); log(info); addDb(info); } else if ((cmmd.equals("ADDALG"))) { Vector info = (Vector)in.readObject(); log(info); addAlg(info); } else if ((cmmd.equals("MINE"))) { Vector info = (Vector)in.readObject(); log(info); mine((String)info.get(0), (String)info.get(1), ((Float)info.get(2)).floatValue(), ((Float)info.get(3)).floatValue()); } else if ((cmmd.equals("MINEADV"))) { Vector info = (Vector)in.readObject(); log(info); mineAdv((String)info.get(0), (String)info.get(1), ((Float)info.get(2)).floatValue(), ((Float)info.get(3)).floatValue(), (Vector)info.get(4), (Vector)info.get(5), (Vector)info.get(6), ((Integer)info.get(7)).intValue(), ((Integer)info.get(8)).intValue()); } else if ((cmmd.equals("GENDB"))) { Vector info = (Vector)in.readObject(); log(info); genDB((String)info.get(0), (String)info.get(1), ((Long)info.get(2)).longValue(), ((Integer)info.get(3)).intValue(), ((Integer)info.get(4)).intValue(), ((Integer)info.get(5)).intValue(), ((Integer)info.get(6)).intValue(), ((Double)info.get(7)).doubleValue(), ((Double)info.get(8)).doubleValue()); } else if ((cmmd.equals("GETNEXT"))) getNext(); else if ((cmmd.equals("SORT"))) { cmmd = (String)in.readObject(); log(cmmd); if (cmmd.equals("ANTECEDENT")) { cmmd = (String)in.readObject(); log(cmmd); if (cmmd.equals("ASC")) { sort(AssociationRule.ANTECEDENT_SIZE, ASC); } else if (cmmd.equals("DESC")) { sort(AssociationRule.ANTECEDENT_SIZE, DESC); } else { sendWarning("unknown command"); } } else if (cmmd.equals("CONSEQUENT")) { cmmd = (String)in.readObject(); log(cmmd); if (cmmd.equals("ASC")) { sort(AssociationRule.CONSEQUENT_SIZE, ASC); } else if (cmmd.equals("DESC")) { sort(AssociationRule.CONSEQUENT_SIZE, DESC); } else { sendWarning("unknown command"); } } else if (cmmd.equals("SUPPORT")) { cmmd = (String)in.readObject(); log(cmmd); if (cmmd.equals("ASC")) { sort(AssociationRule.SUPPORT, ASC); } else if (cmmd.equals("DESC")) { sort(AssociationRule.SUPPORT, DESC); } else { sendWarning("unknown command"); } } else if (cmmd.equals("CONFIDENCE")) { cmmd = (String)in.readObject(); log(cmmd); if (cmmd.equals("ASC")) { sort(AssociationRule.CONFIDENCE, ASC); } else if (cmmd.equals("DESC")) { sort(AssociationRule.CONFIDENCE, DESC); } else { sendWarning("unknown command"); } } else { sendWarning("unknown command"); } } else { sendWarning("unknown command"); } } else if (cmmd.equals("LOGIN")) { loggedOn = true; Vector info = (Vector)in.readObject(); log(info); login((String)info.get(0), (String)info.get(1)); } else // exit if first command is not LOGIN break; } catch (Throwable e) { log(e); break; } } } /* * Creates the configuration object for this connection * verifies if the user is valid * sets true the boolean loggedOn * in case of errors throws an exception * that will break the loop and close the connection */ private void login(String user, String password) throws ServerChildException, IOException { try { // create a configuration object for this connection dbconf = DBConfig.getDBConfig(); } catch (DBConfigException e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -