package server.serverMain; |
import java.awt.BorderLayout; |
import java.awt.Color; |
import java.awt.Container; |
import java.awt.Cursor; |
import java.awt.Dialog; |
import java.awt.Dimension; |
import java.awt.Font; |
import java.awt.Toolkit; |
import java.awt.event.ActionEvent; |
import java.awt.event.ActionListener; |
import java.awt.event.ItemEvent; |
import java.awt.event.ItemListener; |
import java.awt.event.KeyEvent; |
import java.awt.event.KeyListener; |
import java.awt.event.MouseEvent; |
import java.awt.event.MouseListener; |
import java.awt.event.WindowAdapter; |
import java.awt.event.WindowEvent; |
import java.io.BufferedReader; |
import java.io.IOException; |
import java.io.InputStreamReader; |
import java.sql.Connection; |
import java.sql.DriverManager; |
import java.sql.ResultSet; |
import java.sql.SQLException; |
import java.sql.Statement; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.Iterator; |
import java.util.Map; |
import javax.jws.Oneway; |
import javax.swing.ImageIcon; |
import javax.swing.JButton; |
import javax.swing.JComboBox; |
import javax.swing.JDialog; |
import javax.swing.JFrame; |
import javax.swing.JLabel; |
import javax.swing.JMenu; |
import javax.swing.JMenuBar; |
import javax.swing.JMenuItem; |
import javax.swing.JOptionPane; |
import javax.swing.JPanel; |
import javax.swing.JScrollBar; |
import javax.swing.JScrollPane; |
import javax.swing.JSplitPane; |
import javax.swing.JTabbedPane; |
import javax.swing.JTable; |
import javax.swing.JTextField; |
import javax.swing.JTextPane; |
import javax.swing.table.AbstractTableModel; |
import javax.swing.table.TableColumn; |
import common.message.node_info; |
import common.message.node_public; |
import common.message.testMessage; |
import server.thread.addFriendsThread.addFriendsThread; |
import server.thread.addFriendsThread.authenticationMessageReceiverThread; |
import server.thread.addFriendsThread.receiveAgreeRefuseThread; |
import server.thread.addqqCanUseThread.addqqCanUseThread; |
import server.thread.applicateThread.applicateServerThread; |
import server.thread.deleteFridendsThread.deleteFriendsThread; |
import server.thread.getAnotherQQIpThread.getAnotherQQIpThread; |
import server.thread.getInfoThread.getInfoThread; |
import server.thread.groupDealThread.groupDealThread; |
import server.thread.heartbeatThread.heartbeatReceiver; |
import server.thread.heartbeatThread.judgeAliveThread; |
import server.thread.loginThread.loginServerThread; |
import server.thread.moveFriendThread.moveFriendThread; |
import server.thread.safeThread.judgeWhetherQuestionExistThread; |
import server.thread.safeThread.receiveSafeAnswerThread; |
import server.thread.safeThread.setSafeQuestionThread; |
import server.thread.safeThread.updatePasswordThread; |
import server.thread.searchThread.searchThread; |
import server.thread.systemMessageThread.sendSystemMessageThread; |
import server.thread.systemSettingsThread.systemSettingThread; |
import server.thread.updatePersonalInfoThread.updatePersonalInfoThread; |
import server.thread.updateRemarkThread.updateRemarkThead; |
public class serverMain extends JFrame |
{ |
JPanel j1 = null ; |
JPanel j2 = null ; |
JPanel j3 = null ; |
JPanel j4 = null ; |
JScrollPane jsroll0 = null ; |
JScrollPane jsroll1 = null ; |
JScrollPane jsroll2 = null ; |
JScrollPane jsroll3 = null ; |
JTextPane textPane0 = null ; |
JTextPane textPane1 = null ; |
public static JTextPane textPane2 = null ; |
JTextField textf_setLimit = null ; |
JButton jb_setLimit = null ; |
JLabel jlable_setLimit = null ; |
JComboBox jcom_setDatabase = null ; |
JButton jb_setDatabase = null ; |
JLabel jlable_setDatabase = null ; |
JTable table = null ; |
JLabel jlable1 = null ; |
JLabel jlable2 = null ; |
JLabel jlable_warning = null ; |
JButton jb1 = null ; |
JButton jb2 = null ; |
JButton jb3 = null ; |
JButton jb4 = null ; |
MyTableModel myModel = null ; |
addqqCanUseThread addCanUse; |
heartbeatReceiver heartbeat; |
judgeAliveThread judgeAlive; |
loginServerThread loginServer; |
applicateServerThread applicateServer; |
searchThread searchServer; |
addFriendsThread addServer; |
authenticationMessageReceiverThread authenticationReceiveServer; |
receiveAgreeRefuseThread agreeRefuseServer; |
deleteFriendsThread deleteServer; |
getAnotherQQIpThread getIpServer; |
getInfoThread getInfoServer; |
judgeWhetherQuestionExistThread getPasswordServer; |
receiveSafeAnswerThread receiverAnswerServer; |
groupDealThread groupDealServer; |
moveFriendThread moveFriendServer; |
setSafeQuestionThread safeQuestionServer; |
systemSettingThread systemSettingServer; |
updatePasswordThread updatePasswordServer; |
updatePersonalInfoThread updatepersonalServer; |
updateRemarkThead updateRemarkServer; |
public static int limit = 100 ; // 申请次数限制 |
public static HashMap<String, node_public> map_onlineInfo = new HashMap<String, node_public>(); |
public static HashMap<String, Integer> map_IsSysMessageExist = new HashMap<String, Integer>(); |
public static HashMap<String, Date> map_date = new HashMap<String, Date>(); |
public static HashMap<String, Integer> map_status = new HashMap<String, Integer>(); |
public static HashMap<String, String> map_array_passwordMap = new HashMap<String, String>(); |
public static ArrayList<String> array_qqCanUse = new ArrayList<String>(); |
public static Connection con1 = null ; |
public static Connection con2 = null ; |
public static int databaseFlag = 0 ; // 0是mysql 1是SQLServer 默认mysql |
public static int startFlag = 0 ; |
private String ip = "localhost" ; |
private int connectException = 0 ; // 连接正确与否 1、正确 2、错误 |
public serverMain() |
{ |
createUserInterface(); |
try |
{ |
startServer(); |
} |
catch (Exception e) |
{ |
JOptionPane.showMessageDialog( null , "服务器启动失败,请查看其是否已经在运行!" , "失败" , |
JOptionPane.ERROR_MESSAGE); |
} |
} |
class refresh extends Thread |
{} |
private void createUserInterface() |
{ |
Container contentPane = getContentPane(); |
contentPane.setBackground(Color.WHITE); |
contentPane.setLayout( null ); |
// |
// |
// 系统消息 |
j1 = new JPanel(); |
j1.setLayout( null ); |
// |
jlable1 = new JLabel( "已发送的系统消息:" ); |
jlable1.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
jlable1.setBounds( 0 , 0 , 120 , 15 ); |
j1.add(jlable1); |
// |
// |
textPane0 = new JTextPane(); |
textPane0.setEditable( false ); |
textPane0.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
textPane0.setDisabledTextColor(Color.red); |
textPane0.setBounds( 0 , 20 , 600 , 180 ); |
j1.add(textPane0); |
jsroll0 = new JScrollPane(textPane0); |
jsroll0.setBounds( 0 , 20 , 590 , 180 ); |
jsroll0.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
j1.add(jsroll0); |
// |
// |
jlable2 = new JLabel( "请在下面输入系统消息,按ctrl+enter发送:" ); |
jlable2.setBounds( 0 , 200 , 250 , 15 ); |
jlable2.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j1.add(jlable2); |
// |
jb1 = new JButton( "清空已发送" ); |
jb1.setBounds( 470 , 202 , 100 , 15 ); |
jb1.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j1.add(jb1); |
jb1.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
jb1ActionPerfromed(e); |
} |
}); |
// |
textPane1 = new JTextPane(); |
textPane1.setBounds( 0 , 220 , 600 , 80 ); |
textPane1.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j1.add(textPane1); |
jsroll3 = new JScrollPane(textPane1); |
jsroll3.setBounds( 0 , 220 , 590 , 80 ); |
jsroll3.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
j1.add(jsroll3); |
// |
jb2 = new JButton( "发送" ); |
jb2.setBounds( 470 , 302 , 100 , 15 ); |
jb2.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j1.add(jb2); |
jb2.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
try |
{ |
jb2ActionPerfromed(e); |
} |
catch (SQLException e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
} |
}); |
// |
// 系统日志 |
j2 = new JPanel(); |
j2.setLayout( null ); |
textPane2 = new JTextPane(); |
textPane2.setBounds( 0 , 0 , 600 , 300 ); |
textPane2.setCursor( new Cursor(Cursor.DEFAULT_CURSOR)); |
textPane2.setText( "系统日志:\n" ); |
textPane2.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
textPane2.setEditable( false ); |
j2.add(textPane2); |
jsroll1 = new JScrollPane(textPane2); |
jsroll1.setBounds( 0 , 0 , 590 , 300 ); |
jsroll1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
j2.add(jsroll1); |
jb3 = new JButton( "清空" ); |
jb3.setBounds( 470 , 302 , 100 , 15 ); |
jb3.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j2.add(jb3); |
jb3.addActionListener( new ActionListener() { |
public void actionPerformed(ActionEvent e) |
{ |
jb3ActionPerfromed(e); |
} |
}); |
// |
j3 = new JPanel(); |
j3.setLayout( null ); |
// 表格 |
myModel = new MyTableModel(); |
table = new JTable(myModel); |
table.setEnabled( true ); |
table.setRowSelectionAllowed( true ); // 设置可否被选择.默认为false |
table.setShowHorizontalLines( true ); |
table.setShowVerticalLines( true ); |
table.setGridColor(Color.blue); |
table.setBounds( 0 , 0 , 600 , 200 ); |
jsroll2 = new JScrollPane(table); |
jsroll2.setBounds( 0 , 0 , 590 , 300 ); |
jsroll2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); |
j3.add(jsroll2); |
// |
jb4 = new JButton( "刷新" ); |
jb4.setBounds( 470 , 302 , 100 , 15 ); |
jb4.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j3.add(jb4); |
jb4.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
jb4ActionPerfromed(e); |
} |
}); |
|
j4 = new JPanel(); |
j4.setLayout( null ); |
jlable_setLimit = new JLabel( "同一个IP一天可申请的次数:" ); |
jlable_setLimit.setBounds( 10 , 10 , 200 , 20 ); |
textf_setLimit = new JTextField(); |
textf_setLimit.setBounds( 200 , 10 , 90 , 20 ); |
jb_setLimit = new JButton( "确定" ); |
jb_setLimit.setBounds( 300 , 10 , 60 , 20 ); |
jb_setLimit.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j4.add(jlable_setLimit); |
j4.add(jb_setLimit); |
j4.add(textf_setLimit); |
jb_setLimit.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
jb_setActionPerfromed(e); |
} |
}); |
jlable_setDatabase = new JLabel( "请选择连接数据库:" ); |
jlable_setDatabase.setBounds( 10 , 40 , 200 , 20 ); |
String item[] = { "MySql" , "SQLServer" }; |
jcom_setDatabase = new JComboBox(item); |
jcom_setDatabase.setBounds( 200 , 40 , 90 , 20 ); |
jlable_warning = new JLabel( "(提示:请先停止服务器再更改此选项!)" ); |
jlable_warning.setBounds( 300 , 40 , 300 , 20 ); |
jlable_warning.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
j4.add(jlable_setDatabase); |
j4.add(jcom_setDatabase); |
j4.add(jlable_warning); |
jcom_setDatabase.addItemListener( new ItemListener() { |
@Override |
public void itemStateChanged(ItemEvent e) |
{ |
jcom_setDatabaseStateChanged(e); |
} |
}); |
// |
JTabbedPane tab = new JTabbedPane(); |
tab.setBounds( 0 , 0 , 600 , 400 ); |
tab.addTab( "系统日志" , j2); |
tab.addTab( "发送系统消息" , j1); |
tab.addTab( "在线情况" , j3); |
tab.addTab( "系统设置" , j4); |
tab.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
contentPane.add(tab); |
Menu m = new Menu(); |
m.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
this .setJMenuBar(m); |
Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize(); |
Dimension framesize = this .getSize(); |
int x = (screensize.width - framesize.width) / 5 ; |
int y = (screensize.height - framesize.height) / 5 ; |
this .setLocation(x, y); |
this .show(); |
setTitle( "飞Q2012服务器" ); |
// this.setIconImage(new ImageIcon("\\icon.jpg").getImage()); |
setResizable( false ); |
setSize( 600 , 400 ); |
setVisible( true ); |
// ------------------------给textPane1添加键盘事件--------------------------------// |
textPane1.addKeyListener( new KeyListener() { |
public void keyPressed(KeyEvent e) |
{ |
if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER) |
{ |
try |
{ |
if (startFlag == 1 ) |
{ |
sendSystemMessageThread sendSys = new sendSystemMessageThread( |
textPane1.getText()); |
textPane0.setText(textPane0.getText() |
+ ( new Date()) + ":" + textPane1.getText() |
+ "\n" ); |
textPane1.setText( "" ); |
} |
else |
{ |
JOptionPane.showMessageDialog( null , |
"服务器已停止运行,请启动后再发系统消息!" , "系统信息" , |
JOptionPane.INFORMATION_MESSAGE); |
textPane1.setText( "" ); |
} |
} |
catch (SQLException e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
} |
} |
public void keyTyped(KeyEvent e) |
{ |
if (e.getKeyChar() >= '0' && e.getKeyChar() <= '9' ) |
{} |
} |
public void keyReleased(KeyEvent e) |
{} |
}); |
// ---------------------------------------------------------------------// |
} |
protected void jcom_setDatabaseStateChanged(ItemEvent e) |
{ |
databaseFlag = jcom_setDatabase.getSelectedIndex(); |
} |
protected void jb_setActionPerfromed(ActionEvent e) |
{ |
String str1 = textf_setLimit.getText(); |
if (str1.equals( "" )) |
{ |
JOptionPane.showMessageDialog( null , "输入 不能为空!" , "输入错误" , |
JOptionPane.ERROR_MESSAGE); |
return ; |
} |
for ( int i = 0 ; i < str1.length(); i++) |
{ |
if (str1.charAt(i) < '0' || str1.charAt(i) > '9' ) |
{ |
textf_setLimit.setText( "" ); |
JOptionPane.showMessageDialog( null , "输入的只能是数字!" , "输入错误" , |
JOptionPane.ERROR_MESSAGE); |
return ; |
} |
} |
limit = Integer.parseInt(str1); |
textf_setLimit.setText( "" ); |
JOptionPane.showMessageDialog( null , "设置成功!" , "设置成功" , |
JOptionPane.INFORMATION_MESSAGE); |
} |
protected void jb4ActionPerfromed(ActionEvent e) |
{ |
myModel = new MyTableModel(); |
table.setModel(myModel); |
table.repaint(); |
} |
protected void jb3ActionPerfromed(ActionEvent e) |
{ |
textPane2.setText( "" ); |
textPane2.setText( "系统日志:\n" ); |
} |
protected void jb2ActionPerfromed(ActionEvent e) throws SQLException |
{ |
if (startFlag == 1 ) |
{ |
sendSystemMessageThread sendSys = new sendSystemMessageThread( |
textPane1.getText()); |
textPane0.setText(textPane0.getText() + ( new Date()) + ":" |
+ textPane1.getText() + "\n" ); |
textPane1.setText( "" ); |
} |
else |
{ |
JOptionPane.showMessageDialog( null , "服务器已停止运行,请启动后再发系统消息!" , "系统信息" , |
JOptionPane.INFORMATION_MESSAGE); |
textPane1.setText( "" ); |
} |
} |
protected void jb1ActionPerfromed(ActionEvent e) |
{ |
textPane0.setText( "" ); |
} |
// 菜单 |
class Menu extends JMenuBar |
{ |
private JDialog aboutDialog; |
/** |
* 菜单初始化操作 |
*/ |
public Menu() |
{ |
JMenu fileMenu1 = new JMenu( "文件" ); |
JMenu fileMenu2 = new JMenu( "操作" ); |
JMenu fileMenu3 = new JMenu( "帮助" ); |
JMenuItem aboutMenuItem = new JMenuItem( "关于..." ); |
JMenuItem exitMenuItem = new JMenuItem( "退出" ); |
JMenuItem startMenuItem = new JMenuItem( "重启服务器" ); |
JMenuItem stopMenuItem = new JMenuItem( "停止服务器" ); |
fileMenu1.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
fileMenu2.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
fileMenu3.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
aboutMenuItem.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
exitMenuItem.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
startMenuItem.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
stopMenuItem.setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
fileMenu1.add(exitMenuItem); |
fileMenu2.add(startMenuItem); |
fileMenu2.add(stopMenuItem); |
fileMenu3.add(aboutMenuItem); |
this .add(fileMenu1); |
this .add(fileMenu2); |
this .add(fileMenu3); |
aboutDialog = new JDialog(); |
initAboutDialog(); |
// 菜单事件 |
exitMenuItem.addActionListener( new ActionListener() { |
public void actionPerformed(ActionEvent e) |
{ |
String sql_update = "update mainInfo set status = 0;" ; |
dispose(); |
try |
{ |
con1.createStatement().execute(sql_update); |
} |
catch (SQLException e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
System.exit( 0 ); |
} |
}); |
aboutMenuItem.addActionListener( new ActionListener() { |
public void actionPerformed(ActionEvent e) |
{ |
aboutDialog.show(); |
} |
}); |
startMenuItem.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
try |
{ |
stopServer(); |
Thread.sleep( 2000 ); |
startServer(); |
textPane2.setText(textPane2.getText() + ( new Date()) |
+ ":" + "服务器重新启动成功!\n" ); |
JOptionPane.showMessageDialog( null , "服务器重启成功!" , "系统信息" , |
JOptionPane.INFORMATION_MESSAGE); |
} |
catch (Exception e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
} |
}); |
stopMenuItem.addActionListener( new ActionListener() { |
@Override |
public void actionPerformed(ActionEvent e) |
{ |
try |
{ |
stopServer(); |
JOptionPane.showMessageDialog( null , "服务器已停止运行!" , |
"系统信息" , JOptionPane.INFORMATION_MESSAGE); |
} |
catch (Exception e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
} |
}); |
setFont( new Font( "宋体" , Font.PLAIN, 12 )); |
} |
/** |
* 返回关于对话框 |
*/ |
public JDialog getAboutDialog() |
{ |
return aboutDialog; |
} |
/** |
* 设置"关于"对话框的外观及响应事件,操作和JFrame一样都是在内容 框架上进行的 |
*/ |
public void initAboutDialog() |
{ |
aboutDialog.setTitle( "关于QQserver" ); |
Container con = aboutDialog.getContentPane(); |
// Swing 中使用html语句 |
JLabel aboutLabel = new JLabel( |
"<html><b>" |
+ "<center><br>QQserver</br><br>verson:1.0</br><br>Copyright © 2011 sdust,All rights reserved 版权所有 山东科技大学 王昌帅 司吉峰 王松松</br></html></b>" , |
JLabel.CENTER); |
aboutLabel.setFont( new Font( "宋体" , Font.PLAIN, 15 )); |
con.add(aboutLabel, BorderLayout.CENTER); |
aboutDialog.setResizable( false ); |
aboutDialog.setSize( 600 , 200 ); |
aboutDialog.setLocation( 205 , 300 ); |
} |
} |
protected void processWindowEvent(WindowEvent e) |
{ |
if (e.getID() == WindowEvent.WINDOW_CLOSING) |
{ |
String sql_update = "update mainInfo set status = 0;" ; |
dispose(); |
try |
{ |
con1.createStatement().execute(sql_update); |
} |
catch (SQLException e1) |
{ |
// TODO Auto-generated catch block |
e1.printStackTrace(); |
} |
System.exit( 0 ); |
} |
else |
{ |
super .processWindowEvent(e); |
} |
} |
// 启动服务器 |
public void startServer() |
{ |
try |
{ |
if (databaseFlag == 0 ) |
{ |
System.out.println( "链接mysql" ); |
// 定义MySQL的数据库驱动程序 |
String DBDRIVER = "com.mysql.jdbc.Driver" ; |
// 定义MySQL数据库的连接地址 |
/*String DBURL1 = "jdbc:mysql://" + ip |
+ ":3306/main?useUnicode=true&characterEncoding=utf8"; |
String DBURL2 = "jdbc:mysql://" + ip |
+ ":3306/users?useUnicode=true&characterEncoding=utf8";*/ |
//jdbc\:mysql\://localhost\:3306/manchar2 |
String DBURL1 = "jdbc:mysql://localhost:3306/main?useUnicode=true&characterEncoding=utf8" ; |
String DBURL2 = "jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=utf8" ; |
// MySQL数据库的连接用户名 |
String DBUSER = "root" ; |
// MySQL数据库的连接密码 |
String DBPASS = "root" ; |
Class.forName(DBDRIVER); // 加载驱动程序 |
con1 = DriverManager.getConnection(DBURL1, DBUSER, DBPASS); |
con2 = DriverManager.getConnection(DBURL2, DBUSER, DBPASS); |
textPane2.setText(textPane2.getText() + ( new Date()) + ":" |
+ "已连接MySQL数据库\n" ); |
} |
else |
{ |
// ///////////////////////////////////////////////////// |
Class.forName( "com.microsoft.sqlserver.jdbc.SQLServerDriver" ); |
String url1 = "jdbc:sqlserver://" + ip |
+ ":1433;DatabaseName=main;" ; |
String url2 = "jdbc:sqlserver://" + ip |
+ ":1433;DatabaseName=users;" ; |
String user = "sa" ; |
String password = "yizhan" ; |
con1 = DriverManager.getConnection(url1, user, password); |
con2 = DriverManager.getConnection(url2, user, password); |
// //////////////////////////////////////////////////////// |
textPane2.setText(textPane2.getText() + ( new Date()) + ":" |
+ "已连接SQLServer数据库\n" ); |
} |
} |
catch (Exception ex) |
{ |
JOptionPane.showMessageDialog( null , "连接数据库失败!" , "系统信息" , |
JOptionPane.ERROR_MESSAGE); |
connectException = 1 ; |
return ; |
} |
try |
// |
{ |
String sql = "select * from Password;" ; // 预读密码 |
Statement state = con1.createStatement(); |
ResultSet res = state.executeQuery(sql); |
while (res.next()) |
{ |
map_array_passwordMap.put(res.getString( "qq" ), |
res.getString( "password" )); |
} |
String sql_sys = "select * from systemMessage;" ; // 预读系统消息 |
ResultSet res_sys = state.executeQuery(sql_sys); |
while (res_sys.next()) |
{ |
if (res_sys.getString( "warning" ) != null ) |
map_IsSysMessageExist.put(res_sys.getString( "qq" ), 1 ); |
else |
map_IsSysMessageExist.put(res_sys.getString( "qq" ), 0 ); |
} |
} |
catch (SQLException e) |
{ |
JOptionPane.showMessageDialog( null , "预读数据库信息失败!" , "系统信息" , |
JOptionPane.ERROR_MESSAGE); |
connectException = 1 ; |
return ; |
} |
try |
{ |
addCanUse = new addqqCanUseThread(); |
heartbeat = new heartbeatReceiver(); |
judgeAlive = new judgeAliveThread(); |
loginServer = new loginServerThread(); |
applicateServer = new applicateServerThread(); |
searchServer = new searchThread(); |
addServer = new addFriendsThread(); |
authenticationReceiveServer = new authenticationMessageReceiverThread(); |
agreeRefuseServer = new receiveAgreeRefuseThread(); |
deleteServer = new deleteFriendsThread(); |
getIpServer = new getAnotherQQIpThread(); |
getInfoServer = new getInfoThread(); |
getPasswordServer = new judgeWhetherQuestionExistThread(); |
receiverAnswerServer = new receiveSafeAnswerThread(); |
groupDealServer = new groupDealThread(); |
moveFriendServer = new moveFriendThread(); |
safeQuestionServer = new setSafeQuestionThread(); |
systemSettingServer = new systemSettingThread(); |
updatePasswordServer = new updatePasswordThread(); |
updatepersonalServer = new updatePersonalInfoThread(); |
updateRemarkServer = new updateRemarkThead(); |
} |
catch (Exception e) |
{ |
JOptionPane.showMessageDialog( null , "启动服务器子程序异常,请重启!" , "系统信息" , |
JOptionPane.ERROR_MESSAGE); |
connectException = 1 ; |
return ; |
} |
startFlag = 1 ; |
jcom_setDatabase.setEnabled( false ); |
textPane2.setText(textPane2.getText() + ( new Date()) + ":" |
+ "服务器启动成功!\n" ); |
} |
@SuppressWarnings ( "deprecation" ) |
public void stopServer() throws ClassNotFoundException, SQLException, |
IOException, InterruptedException |
{ |
if (connectException != 1 ) |
{ |
addCanUse.stop(); |
heartbeat.stop(); |
judgeAlive.stop(); |
loginServer.stop(); |
applicateServer.stop(); |
searchServer.stop(); |
addServer.stop(); |
authenticationReceiveServer.stop(); |
agreeRefuseServer.stop(); |
deleteServer.stop(); |
getIpServer.stop(); |
getInfoServer.stop(); |
getPasswordServer.stop(); |
receiverAnswerServer.stop(); |
groupDealServer.stop(); |
moveFriendServer.stop(); |
safeQuestionServer.stop(); |
systemSettingServer.stop(); |
updatePasswordServer.stop(); |
updatepersonalServer.stop(); |
updateRemarkServer.stop(); |
heartbeat.server.close(); |
loginServer.server.close(); |
applicateServer.server.close(); |
searchServer.server.close(); |
addServer.server.close(); |
authenticationReceiveServer.server.close(); |
agreeRefuseServer.server.close(); |
deleteServer.server.close(); |
getIpServer.server.close(); |
getInfoServer.server.close(); |
getPasswordServer.server.close(); |
receiverAnswerServer.server.close(); |
groupDealServer.server.close(); |
moveFriendServer.server.close(); |
safeQuestionServer.server.close(); |
systemSettingServer.server.close(); |
updatePasswordServer.server.close(); |
updatepersonalServer.server.close(); |
updateRemarkServer.server.close(); |
map_date.clear(); |
map_IsSysMessageExist.clear(); |
map_onlineInfo.clear(); |
map_status.clear(); |
map_array_passwordMap.clear(); |
array_qqCanUse.clear(); |
String sql_update = "update mainInfo set status = 0;" ; |
con1.createStatement().execute(sql_update); |
startFlag = 0 ; |
jcom_setDatabase.setEnabled( true ); |
textPane2.setText(textPane2.getText() + ( new Date()) + ":" |
+ "服务器已停止!\n" ); |
} |
} |
class MyTableModel extends AbstractTableModel |
{ |
int count = map_onlineInfo.size(); |
private String[] columnNames = { "QQ" , "ip" , "main_port" , "sys_port" , |
"heartbeat_port" , "chat_port" }; |
private String[][] data = new String[count][]; |
public MyTableModel() |
{ |
Map m = serverMain.map_onlineInfo; |
Iterator ite = m.keySet().iterator(); |
for ( int i = 0 ; ite.hasNext(); i++) |
{ |
Object key = ite.next(); |
data[i] = new String[ 6 ]; |
data[i][ 0 ] = key.toString(); |
data[i][ 1 ] = map_onlineInfo.get(key).ip; |
data[i][ 2 ] = "" + map_onlineInfo.get(key).port_main; |
data[i][ 3 ] = "" + map_onlineInfo.get(key).port_sys; |
data[i][ 4 ] = "" + map_onlineInfo.get(key).port_alive; |
data[i][ 5 ] = "" + map_onlineInfo.get(key).port_chat; |
} |
} |
public int getColumnCount() |
{ |
return columnNames.length; |
} |
public int getRowCount() |
{ |
return data.length; |
} |
public String getColumnName( int col) |
{ |
return columnNames[col]; |
} |
public String getValueAt( int row, int col) |
{ |
return data[row][col]; |
} |
public Class getColumnClass( int c) |
{ |
return getValueAt( 0 , c).getClass(); |
} |
public boolean isCellEditable( int row, int col) |
{ |
return false ; |
} |
} |
public static void main(String args[]) throws ClassNotFoundException, |
SQLException, IOException, InterruptedException |
{ |
serverMain server = new serverMain(); |
} |
} |
中级程序员
by: 夏幽乔木 发表于:2014-03-20 16:04:58 顶(0) | 踩(0) 回复
清晰明了,初学者的最爱
回复评论