controller.java

来自「一个很详细的航空售票系统开发的例子」· Java 代码 · 共 132 行

JAVA
132
字号
package com.tarena.abs.server;
import java.net.*;
import java.io.*;
import java.util.*;

import com.tarena.abs.client.ClientMainClass;
import com.tarena.abs.dao.*;
import com.tarena.abs.model.*;

public class Controller {
	private Socket s;
	private ObjectInputStream ois;
	private ObjectOutputStream oos;
	private AgentDAO agentDao;
	private FlightDAO flightDao;
	
	public Controller(Socket s){
		this.s=s;
		agentDao=ServerMainClass.agentDao;
		flightDao=ServerMainClass.flightDao;
	}
	public void handle() throws Exception {	
		ois=new ObjectInputStream(s.getInputStream());
		oos=new ObjectOutputStream(s.getOutputStream());
		while(true){
			Request req=(Request)ois.readObject();
			String type=req.getType();
			if(type.equals("login")){
				loginHandle(req);
			}else if(type.equals("flightSearch")){
				flightSearchHandle(req);
			}else if(type.equals("changePasswd")){
				changePasswdHandle(req);
			}
			else if(type.equals("order")){
				orderHandle();
			}else if(type.equals("quit")){
				//quitHandle();
				break;
			}
		}
	}
	
	private void loginHandle(Request req){
		String userName=(String)req.getData("UserName");
		String passwd=(String)req.getData("Password");
		Object obj=agentDao.getAgent(userName,passwd);
		Agent user=(Agent)obj;
		if(user != null){
			ServerMainClass.allOnlineAgents.add(user);
		}
		try {
			Response res=new Response("login");
			res.setData(user);
			oos.writeObject(res);
			oos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private void changePasswdHandle(Request req){
		String userName=(String)req.getData("UserName");
		String passwd=(String)req.getData("Password");
		String newPasswd=(String)req.getData("NewPasswd");
		boolean is=agentDao.modifyPassword(userName,passwd,newPasswd);
		Agent user=null;
		if(is){
			try {
				user=agentDao.getAgent(userName,newPasswd);
				Response res=new Response("changePasswd");
				res.setData(user);
				oos.writeObject(res);
				oos.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		}
	private void flightSearchHandle(Request req){
		String fromAddr=(String)req.getData("fromAddress");
		String toAddr=(String)req.getData("toAddress");
		String date=(String)req.getData("date");
		
		MyDate theDate=MyDate.getDateFromStr(date,"-");
//		HashSet hs=new HashSet();
		try {
			HashSet hs=(HashSet)(ServerMainClass.flightDao.getAllFlights(fromAddr,toAddr,theDate));
//			System.out.println(hs);
			Response res=new Response("flightSearch");
			res.setData(hs);
//			System.out.println(res.getData());
			oos.writeObject(res);
			oos.flush();

			
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		//航班查询模块
	}

	private void orderHandle(){
		try {
			Object obj = new Object();
			synchronized(obj){
				Order od=(Order)ois.readObject();
				boolean success=flightDao.order(od);
				Agent agent = null;
				if(success){
					agent = agentDao.updateScore(od.getUser().getName(), od.getItems().size()*100);
					ServerMainClass.orders.add(od);
				}
				oos.writeObject(agent);
				oos.flush();
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		//出票模块
	}
	private void quitHandle(){
		try {
			s.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?