package com.way.chat.server; import java.io.IOException; import java.io.ObjectInputStream; import java.net.Socket; import java.util.ArrayList; import com.way.chat.common.bean.TextMessage; import com.way.chat.common.bean.User; import com.way.chat.common.tran.bean.TranObject; import com.way.chat.common.tran.bean.TranObjectType; import com.way.chat.common.util.MyDate; import com.way.chat.dao.UserDao; import com.way.chat.dao.impl.UserDaoFactory; public class InputThread extends Thread { private Socket socket; private OutputThread out; private OutputThreadMap map; private ObjectInputStream ois; private boolean isStart = true; public InputThread(Socket socket, OutputThread out, OutputThreadMap map) { this.socket = socket; this.out = out; this.map = map; try { ois = new ObjectInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } public boolean isStart() { return isStart; } public void setStart(boolean isStart) { this.isStart = isStart; } @Override public void run() { try { while (isStart) { // ��ȡ��Ϣ readMessage(); } if (ois != null) ois.close(); if (socket != null) socket.close(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // e.printStackTrace(); // isStart = false; } } public void readMessage() throws IOException, ClassNotFoundException { Object readObject = ois.readObject();// �����ж�ȡ���� UserDao dao = UserDaoFactory.getInstance();// ͨ��daoģʽ�����̨ if (readObject != null && readObject instanceof TranObject) { TranObject<?> read_tranObject = (TranObject<?>) readObject;// ת���ɴ������ switch (read_tranObject.getType()) { case REGISTER:// ����û���ע�� User registerUser = (User) read_tranObject.getObject(); int registerResult = dao.register(registerUser); System.out.println("ע��:" + registerResult); // ���û��ظ���Ϣ TranObject<User> register2TranObject = new TranObject<User>( TranObjectType.REGISTER); User register2user = new User(); register2user.setId(registerResult); register2TranObject.setObject(register2user); out.setMessage(register2TranObject); break; case LOGIN: User loginUser = (User) read_tranObject.getObject(); ArrayList<User> list = dao.login(loginUser); TranObject<ArrayList<User>> login2Object = new TranObject<ArrayList<User>>( TranObjectType.LOGIN); if (list != null) {// �����¼�ɹ� TranObject<User> onObject = new TranObject<User>( TranObjectType.LOGIN); User login2User = new User(); login2User.setId(loginUser.getId()); onObject.setObject(login2User); for (OutputThread onOut : map.getAll()) { onOut.setMessage(onObject);// �㲥һ���û����� } map.add(loginUser.getId(), out);// �ȹ㲥���ٰѶ�Ӧ�û�id��д�̴߳���map�У��Ա�ת����Ϣʱ���� login2Object.setObject(list);// �Ѻ����б����ظ��Ķ����� } else { login2Object.setObject(null); } out.setMessage(login2Object);// ͬʱ�ѵ�¼��Ϣ�ظ����û� System.out.println(MyDate.getDateCN() + " �û���" + loginUser.getId() + " ������"); break; case LOGOUT:// ������˳����������ݿ�����״̬��ͬʱȺ���������������û� User logoutUser = (User) read_tranObject.getObject(); int offId = logoutUser.getId(); System.out .println(MyDate.getDateCN() + " �û���" + offId + " ������"); dao.logout(offId); isStart = false;// �����Լ��Ķ�ѭ�� out.removeThread();// �ӻ�����߳����Ƴ� out.setMessage(null);// ��Ҫ����һ������Ϣȥ����д�߳� out.setStart(false);// �ٽ���д�߳�ѭ�� TranObject<User> offObject = new TranObject<User>( TranObjectType.LOGOUT); User logout2User = new User(); logout2User.setId(logoutUser.getId()); offObject.setObject(logout2User); for (OutputThread offOut : map.getAll()) {// �㲥�û�������Ϣ offOut.setMessage(offObject); } break; case MESSAGE:// �����ת����Ϣ�������Ⱥ���� // ��ȡ��Ϣ��Ҫת���Ķ���id��Ȼ���ȡ����ĸö����д�߳� int id2 = read_tranObject.getToUser(); OutputThread toOut = map.getById(id2); if (toOut != null) {// ����û����� toOut.setMessage(read_tranObject); } else {// ���Ϊ�գ�˵���û��Ѿ�����,�ظ��û� TextMessage text = new TextMessage(); text.setMessage("������Ϣʧ�ܣ��û������Ѿ����ߣ�"); TranObject<TextMessage> offText = new TranObject<TextMessage>( TranObjectType.MESSAGE); offText.setObject(text); offText.setFromUser(0); out.setMessage(offText); } break; case FILE: break; default: break; } } } }