2013년 1월 28일 월요일

[Java] 프로젝트 스샷과 코드


왼쪽에 가장 큰 화면이 Client에서 접속한 화면이다.
식당의 테이블에서 손님에게 보여지는 화면으로써 원격으로 메뉴를 선택하고 주문할 수 있다. 추천기능도 있고 음식이 요리되는 동안 지루함을 덜기 위한 게임도 마련했다.

네트워크를 담당하여 Client와 Server가 연동되도록 하는 부분을 맡았기 때문에 서버에 대해 설명하자면 클라이언트에서 프로그램을 실행시키는 즉시 서버에 접속한다.

그러면 바로 서버에서 몇번 테이블에 손님이 왔는지 바로 확인이 가능하며 주문을 받고 손님의 요구사항도 채팅창을 통해 알 수 있다. 주문서를 확인하여 주문확인 버튼을 클릭함으로써 손님에게 메세지를 전송할 수 있고 마찬가지로 요리완료 메세지도 전달할 수 있다.

초기에 목표로 했던 부분들은 다 완성시킨 프로젝트이다.

나름 중요한 코드만 올리고 끝.

서버

try {
serverSocket = new ServerSocket(9000);
while (true) {
socket = serverSocket.accept();// 클라이언트의 소켓을 기다리다가 클라이언트가 접속하면 클라이언트의 소켓을 얻음
ServerFrame sf = new ServerFrame(socket);//접속과 동시에 서버에서 보이는 테이블창 생성
Thread t = new Thread(sf);//스레드 작동. 그 이유는 해당하는 테이블의 클라이언트가 접속을 종료하면 그것을 확인하여 자동으로 종료하기 위함
t.start();
}
} catch (Exception e) {

} finally {
try {// 서버 종료
socket.close();
serverSocket.close();
} catch (Exception e) {

}

서버접속후 각각의 손님 테이블을 돌리는 스레드(제일 중요)

public void run() {
try {
ta.append(name + " 손님이 오셨습니다." + "\n");
ta.setSelectionStart(ta.getText().length());
while (true) {
String str = br.readLine();
if (str.equals("#주문")) {//읽어들이는 문자열 중 "#주문" 이라는 문자열이 왔을 때 주문에 관련된 문자열처리
ta.append(name + ">" + "주문들어왔습니다." + "\n");
ta.setSelectionStart(ta.getText().length());
if (map.containsKey(name)) {
map.remove(name);
}
String str1 = br.readLine();
stk = new StringTokenizer(str1, ",");//문자열 나누기
alist = new ArrayList<String>();
while (stk.hasMoreTokens()) {
alist.add(stk.nextToken());
}
map.put(name, alist);
continue;
} else if (str.equals("#호출")) {//"#호출"이라는 문자열이 들어왔을 때 호출 창 띄우기
new ServerCall(name + "에서 긴급 호출입니다!");
}
ta.append(name + ">" + str + "\r\n");
ta.setSelectionStart(ta.getText().length());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ta.append(name + ">" + "퇴실하셨습니다");
ta.setSelectionStart(ta.getText().length());
new ServerFrameClose(name + ">" + "퇴실하셨습니다", f);
try {
br.close();
pw.close();
socket.close();
notify();
} catch (Exception e) {

}

}
}




댓글 1개: