📄 controller.java
字号:
package com.tarena.abs.server;
import java.net.*;
import java.io.*;
import java.util.*;
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("order")){
orderHandle();
}else if(type.equals("quit")){
quitHandle(req);
break;
}else if(type.equals("changePW")){
changePassworldHAndle(req);
}else if(type.equals("seachFlights")){
seachFlightsHandle(req);
}
}
}
//自己实现的航班查询
private void seachFlightsHandle(Request req){
String fromAddress=(String)req.getData("FromAddress");
String toAddress=(String)req.getData("ToAddress");
String date = (String)req.getData("MyDate");
MyDate d = new MyDate(Integer.parseInt(date.split("-")[0]),Integer.parseInt(date.split("-")[1]),Integer.parseInt(date.split("-")[2]));
Set set = ServerMainClass.flightDao.getAllFlights(fromAddress, toAddress, d);
try {
Response res=new Response("seachFlights");
res.setData((Serializable) set);
oos.writeObject(res);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private void changePassworldHAndle(Request req){
String userName=(String)req.getData("UserName");
String oldPasswd=(String)req.getData("OldPassword");
String newPasswd=(String)req.getData("NewPassworld");
boolean isSuccess=agentDao.modifyPassword(userName, oldPasswd, newPasswd);
Agent agent = null;
if(isSuccess){
agent = agentDao.getAgent(userName, newPasswd);
}
try {
Response res=new Response("changePW");
res.setData(agent);
oos.writeObject(res);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
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 flightSearchHandle(Request req){
String fromAddr=(String)req.getData("fromAddr");
String toAddr=(String)req.getData("toAddr");
String date=(String)req.getData("date");
MyDate theDate=MyDate.getDateFromStr(date,"-");
HashSet hs=new HashSet();
try {
hs=(HashSet)(ServerMainClass.flightDao.getAllFlights(fromAddr,toAddr,theDate));
int i=hs.size();
oos.writeInt(i);
oos.flush();
for(Object obj:hs){
ois.read();
Flight f=(Flight)obj;
oos.writeObject(f);
oos.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
//航班查询模块
}
@SuppressWarnings("unchecked")
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(Request req){
try {
String name = req.getData("Name");
Iterator it = ServerMainClass.allOnlineAgents.iterator();
while(it.hasNext()){
Agent agent = (Agent)it.next();
if(agent.getName().equals(name)){
ServerMainClass.allOnlineAgents.remove(agent);
}
}
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -