package org.javaprogram.client;
/* ***************************
 * 此界面为聊天室的登录界面,      *
 * 实现了首次使用的注册功能,     *
 * 点击注册按钮可进入注册界面      *
 * ***************************/
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.net.*;
import javax.swing.*;
import org.javaprogram.model.LoginMessage;
public class Login extends JFrame
{
private static final long serialVersionUID = 1976299771591346524L;

JPanel jp;
JLabel jl_name,jl_pwd;
JTextField jtf_name;
JPasswordField jpf_pwd;
JButton jb_ok,jb_regist;

Socket s;
ObjectOutputStream oos;
ObjectInputStream ois;

//构造方法
public Login()
{
//生成和服务器相连的socket,获取对象输入输出流
try
{
s = new Socket("127.0.0.1",3306);
oos = new ObjectOutputStream(s.getOutputStream());
ois = new ObjectInputStream(s.getInputStream());
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}

//实例化面板,并设置布局方式为4行2列的网格布局
jp = new JPanel(new GridLayout(3,2,2,2));
//实例化标签
jl_name = new JLabel("请输入用户名:");
jl_name.setFont(new Font("",Font.BOLD,18));
jl_pwd = new JLabel("请输入密码:");
jl_pwd.setFont(new Font("",Font.BOLD,18));
//实例化各个输入框
jtf_name = new JTextField(15);
jpf_pwd = new JPasswordField(15);
//实例化按钮
jb_ok = new JButton("确  认");
jb_ok.setFont(new Font("",Font.BOLD,20));
//添加动作事件监听器
jb_ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//调用登录方法
doLogin();
}
});

jb_regist = new JButton("注  册");
jb_regist.setFont(new Font("",Font.BOLD,20));
//内部类
jb_regist.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//调用装载注册窗口的方法
LoadRegistWindow();
}
});
//将各个组件添加到面板中
jp.add(jl_name);
jp.add(jtf_name);
jp.add(jl_pwd);
jp.add(jpf_pwd);
jp.add(jb_ok);
jp.add(jb_regist);

//将面板添加到框架中
getContentPane().add(BorderLayout.CENTER,jp);
//设置窗口标题及大小
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension dime = kit.getScreenSize();
setLocation((dime.width-350)/2,(dime.height-150)/2);
setTitle("登录聊天室");
setSize(350,150);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
/*
 * 装载注册窗口的方法
 * 
 * 
 * */
private void LoadRegistWindow()
{
//释放登录窗口的资源,调用注册窗口
extracted();
new Regist();
}
@SuppressWarnings("deprecation")
private void extracted() {
this.disable();
}


/*
 * 登录方法
 * 
 * */
public void doLogin()
{
//取得用户名和密码
String name = jtf_name.getText().trim();
String password = new String(jpf_pwd.getPassword()).trim();
//判断是否输入信息,两次密码是否相等
if(name.equals("")||password.equals(""))
{
JOptionPane.showMessageDialog(null,"请输入完整的信息");
}
else
{
//准备发送登录消息给服务器
LoginMessage lm = new LoginMessage(name,password);
try
{
//发送对象
oos.writeObject(lm);
oos.flush();
//读取结果,如果为true字符串说明注册成功
if(((String)ois.readObject()).equals("true"))
{
JOptionPane.showMessageDialog(null,"登录成功");
//释放登录窗口资源,调用聊天室窗口
extracted();
new Client("127.0.0.1",3306, name);
}
else
{
JOptionPane.showMessageDialog(null,"登录失败!请确认用户名和密码是否正确");
}
}
catch(UnknownHostException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
catch(HeadlessException e)
{
e.printStackTrace();
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
}
}
}

public static void main(String[] args)
{
new Login();
}
}