중대 컴공2011.05.27 02:30


IBM Rational Requisite Pro 라는 프로그램과 같은 프로그램을 제작.
JUnit Test, EasyMock 을 사용하여 단위 테스트를 하는 프로젝트!

작업환경
Windows Vista
Eclipse
Java SDK 6.*
Swing

팀인원
5명

실해방법
java -jar RMT.jar


프로그램의 사용 방법
1. 프로젝트 명을 입력하여 새로운 프로젝트를 만든다

 
2. 왼쪽에 있는 프로젝트에 마우스 오른쪽 버튼을 눌러 properties를 클릭한다

 
3. 요구사항 종류를 만듭니다.



4. 요구사항별 속성을 수정합니다. 새로운 속성을 추가하거나 수정할 수 있습니다.

 
5. 모든 설정이 완료되었습니다. 이제 요구사항을 추가하세요.



 
6. 추가한 요구사항들의 관계를 설정하세요.





7. 하나의 요구사항 종류를 선택하여 요구사항을 추적해 보세요!






신고
Posted by 초프(초보 프로그래머)
Project2010.05.13 10:41



  • 입장, 퇴장, 입장, 퇴장 등이 반복하여 일어났을때 생기는 클라이언트 번호 오류 문제를 해결 하였습니다.
  • 기본 제공되는 Message Class 를 최소한으로 줄였습니다.
  • 새로운 Message Class 가 생길때 마다 기존의 Message Class에서 type을 지정하던 것을 변경하여 Message Constants Class를 하나 만들었으며 다른 프로젝트에 적용할 때에는 예제와 같이 상속을 사용함
  • GUI (Swing) 을 이용한 예제


서버 화면으로 3개로 구분하여 로그가 나오게 하였습니다.

알림 / 보낸 메세지 / 받은 메세지 순으로 나옵니다.


클라이언트 화면입니다. 대화명은 테스트이므로 클라이언트 번호로 나오게 하였습니다.



채팅 서버
package yhg.comm.test;

import java.io.IOException;

import yhg.comm.message.Message;
import yhg.comm.server.CommClientManager;
import yhg.comm.server.CommServer;
import yhg.comm.server.ICommClientManagerEvent;
import yhg.comm.server.ICommServerEvent;

public class Server {
	private CommServer server;
	private ServerFrame frame;
	
	public Server(){
		frame = new ServerFrame();
		
		try {
			server = new CommServer(1234);
			setEvent();
			server.start();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		frame.setVisible(true);
	}
	
	private void setEvent(){
		server.setServerEvent(new ICommServerEvent(){
			public void onEnterClient(CommClientManager cm) {
				frame.addNoticeLog("["+cm.getNumber()+"] Enter");
				
				MSGEnterClient msgEC = new MSGEnterClient();
				msgEC.setClientNumber(cm.getNumber());
				try {
					server.sendAll(cm.getNumber(),msgEC);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			public void onLeaveClient(CommClientManager cm) {
				frame.addNoticeLog("["+cm.getNumber()+"] Leave");

				MSGLeaveClient msgLC = new MSGLeaveClient();
				msgLC.setClientNumber(cm.getNumber());
				try {
					server.sendAll(cm.getNumber(),msgLC);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
		
		server.setClientManagerEvent(new ICommClientManagerEvent(){
			public void onReceiveMessage(CommClientManager cm, Message msg) {
				frame.addReceiveLog("[R]["+cm.getNumber()+"]"+msg);
				
				switch(msg.getType()){
					case MSGConstants.type_MSGChat:
						MSGChat msgC = (MSGChat) msg;
						msgC.setClientNumber(cm.getNumber());
						try {
							server.sendAll(msg);
						} catch (IOException e) {
							e.printStackTrace();
						}
						break;
				}
			}

			public void onSendMessage(CommClientManager cm, Message msg) {
				frame.addSendLog("[S]["+cm.getNumber()+"]"+msg);
			}
		});
	}
	
	public static void main(String[] args){
		new Server();
	}
}

채팅 클라이언트
package yhg.comm.test;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.net.UnknownHostException;

import yhg.comm.client.CommClient;
import yhg.comm.client.ICommClientEvent;
import yhg.comm.message.Message;

public class Client {
	private CommClient client;
	private ClientFrame frame;
	
	public Client(){
		frame = new ClientFrame();
		
		try {
			client = new CommClient("127.0.0.1",1234);
			setEvent();
			client.start();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		frame.setVisible(true);
	}
	
	private void setEvent(){
		client.setClientEvent(new ICommClientEvent(){
			public void onReceiveMessage(Message msg) {
				switch(msg.getType()){
					case MSGConstants.type_MSGEnterClient:
						MSGEnterClient msgEC = (MSGEnterClient) msg;
						frame.addNotice(msgEC.getClientNumber()+" 님 입장");
						break;
					case MSGConstants.type_MSGLeaveClient:
						MSGLeaveClient msgLC = (MSGLeaveClient) msg;
						frame.addNotice(msgLC.getClientNumber()+" 님 퇴장");
						break;
					case MSGConstants.type_MSGChat:
						MSGChat msgC = (MSGChat) msg;
						frame.addChat(msgC.getClientNumber()+"", msgC.getChat());
						break;
				}
			}

			public void onSendMessage(Message msg) {
				
			}
		});
		
		frame.getChatTextField().addKeyListener(new KeyListener(){
			public void keyPressed(KeyEvent arg0) {}

			public void keyReleased(KeyEvent evt) {
				if(evt.getKeyCode() != 10)	return ;
				
				String chat = frame.getChatTextField().getText();
				if(chat.length() == 0)	return;
				
				MSGChat msgC = new MSGChat();
				msgC.setChat(chat);
				
				try {
					client.send(msgC);
					frame.getChatTextField().setText("");
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

			public void keyTyped(KeyEvent arg0) {}
		});
	}
	
	public static void main(String[] args){
		new Client();
	}
}

신고
Posted by 초프(초보 프로그래머)