Project-Chat Program
Download
Report
Transcript Project-Chat Program
간단한 채팅 프로그램 만들기
Windows Programming, 2009 Fall
프로그램 설계
ChatServer
Client
Open
Close
ChatClient
Connect
Disconnect
message
데이터베이스
내용 영역
◀
현재 메모리
CSocket
내용 영역
message
CSocket 대화 내용
message
전송
Client
MySQL Database
Copyright 2009 by CEBT
WP, 2009 Fall - 2
ChatServer
OpenConnection
소켓을 열어서 ChatClient가 통신을 할 수 있도록 함
CloseConnection
현재의 모든 연결을 종료함
SendMessageAll
수신된 메시지를 현재 접속한 모든 ChatClient에 전송
ReadFromDB
DB에 저장된 내용을 읽어서 리스트 컨트롤에 보여줌
SaveToDB
저장되지 않은 모든 내용을 데이터 베이스에 저장
Copyright 2009 by CEBT
WP, 2009 Fall - 3
ChatServer
CListenSocket:CAsyncSocket
입출력이 비동기적으로 이루어짐
m_ptrClientSocketList
–
서버에 접속한 클라이언트 목록 유지
OnAccept(), Accept(), CloseClientSocket(), SendMessageAll()
CClientSocket:CSocket
입출력이 동기적으로 이루어짐
m_pListenSocket
–
CListenSocket정보를 저장하고 있다가, Client가 종료할 때 Client를 삭
제하도록 알려줌
OnReceive(), OnClose(), SetListenSocket()
Copyright 2009 by CEBT
WP, 2009 Fall - 4
ChatClient
Connect
채팅서버에 연결
Disconnect
채팅 서버에 대한 연결 해제
Send
현재 타이핑한 메시지를 서버로 전송함
서버에 전송만 하고, 보낸 메시지를 OnReceive가 받아서 처리하도
록 함 (중복을 없애기 위해)
OnReceive
서버로부터 전송받은 메시지를 화면에 보여줌
Copyright 2009 by CEBT
WP, 2009 Fall - 5
ChatClient
CConnectSocket:CSocket
서버와의 접속 상태를 유지하고, 서버에 메시지를 전송하거나 서버
로부터 메시지를 받아서 대화창에 보여주도록 함
OnReceive(), OnClose()
Copyright 2009 by CEBT
WP, 2009 Fall - 6
Table Schema
필드 이름
데이터 유형
설명
id
int
user_id
varchar(32)
content
text
메시지 내용 저장
rdate
date
메시지 전송(수신) 날짜
기본키를 위한 필드
상요자 아이디를 저장하기 위한 필드
create table wp_dialog
(
id int not null auto_increment primary key,
user_id varchar(32),
content text,
rdate date
);
insert into wp_dialog (user_id, content, rdate)
values ('admin', 'database create', now());
Copyright 2009 by CEBT
WP, 2009 Fall - 7
데이터베이스 연결
Copyright 2009 by CEBT
WP, 2009 Fall - 8
테이블 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 9
기본 데이터 삽입
Copyright 2009 by CEBT
WP, 2009 Fall - 10
ODBC 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 11
ODBC 생성 - 드라이버 선택
Copyright 2009 by CEBT
WP, 2009 Fall - 12
ODBC 생성 – 데이터베이스 연결 정보 설정
Copyright 2009 by CEBT
WP, 2009 Fall - 13
ODBC 생성 완료
Copyright 2009 by CEBT
WP, 2009 Fall - 14
ChatServer Project 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 15
ChatServer Project 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 16
ChatServer Project 생성 – ODBC 연결
Copyright 2009 by CEBT
WP, 2009 Fall - 17
ChatServer Project 생성 – 소켓 라이브러리 포함
Copyright 2009 by CEBT
WP, 2009 Fall - 18
ChatServer Project 생성 완료
Copyright 2009 by CEBT
WP, 2009 Fall - 19
필드 매핑 확인
class CChatServerSet
Copyright 2009 by CEBT
WP, 2009 Fall - 20
UI 생성 – 리스트 컨트롤 추가 (DB)
Copyright 2009 by CEBT
WP, 2009 Fall - 21
UI 생성 – 리스트 컨트롤 추가 (MEM)
Copyright 2009 by CEBT
WP, 2009 Fall - 22
UI 생성 – 데이터베이스로 저장 버튼 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 23
UI 생성 – 리스트 컨트롤을 위한 멤버 변수 생성 및 연결
Copyright 2009 by CEBT
WP, 2009 Fall - 24
메뉴바 수정
종료
서버
대화 내용 저장
보기
도움말
서버 열기
ID_SERVER_OPEN
ID_SAVE_TO_DB
서버 닫기
ID_SERVER_CLOSE
Copyright 2009 by CEBT
WP, 2009 Fall - 25
도구 모음 수정
Copyright 2009 by CEBT
WP, 2009 Fall - 26
완성된 UI
CListCtrl m_lcDBContent;
CListCtrl m_lcMemContent;
IDC_LIST_DB
IDC_LIST_MEM
IDC_BUTTON_SAVE_TO_DB
Copyright 2009 by CEBT
WP, 2009 Fall - 27
리스트 컨트롤의 컬럼 헤더 생성
void CChatServerView::OnInitialUpdate()에 헤더를 생성하는 코
드 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 28
리스트 컨트롤에 DB내용 표시하는 코드 추가
void CChatServerView::ReadFromDB(); 생성
CChatServerView::OnInitialUpdate()에서 내용 읽어들이도록 호출
Copyright 2009 by CEBT
WP, 2009 Fall - 29
초기화된 UI
Copyright 2009 by CEBT
WP, 2009 Fall - 30
CListenSocket 클래스 생성
http://msdn.microsoft.com/en-us/library/aa268620(VS.60).aspx
Copyright 2009 by CEBT
WP, 2009 Fall - 31
CClientSocket 클래스 생성
http://msdn.microsoft.com/en-us/library/aa313917(VS.60).aspx
Copyright 2009 by CEBT
WP, 2009 Fall - 32
CClientSocket::m_pListenSocket 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 33
CClientSocket::SetListenSocket() 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 34
CChatServerView::m_ListSocket 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 35
CListenSocket::m_ptrClientSocketList 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 36
CChatServerView::AddMessage() 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 37
CChatServerView::AddMessage() 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 38
Override CListenSocket::OnAccept()
Copyright 2009 by CEBT
WP, 2009 Fall - 39
void CListenSocket::OnAccept(int nErrorCode)
Do not forget adding header file
Copyright 2009 by CEBT
WP, 2009 Fall - 40
CListenSocket::CloseClientSocket(Csocket* pClient)
Copyright 2009 by CEBT
WP, 2009 Fall - 41
CListenSocket::SendMessageAll(…)
Copyright 2009 by CEBT
WP, 2009 Fall - 42
CClientSocket::함수 정의
Copyright 2009 by CEBT
WP, 2009 Fall - 43
BOOL CChatServerView::m_bIsOpen 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 44
CChatServerView::OnServerOpen(), OnServerClose()
Copyright 2009 by CEBT
WP, 2009 Fall - 45
CChatServerView::OnServerOpen(), OnServerClose()
Copyright 2009 by CEBT
WP, 2009 Fall - 46
CChatServerView::OnDestroy() 수정
Copyright 2009 by CEBT
WP, 2009 Fall - 47
CChatServerView::OnUpdateServerOpen(),
OnUpdateServerClose() 정의
Copyright 2009 by CEBT
WP, 2009 Fall - 48
ChatClient 프로젝트 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 49
ChatClient 프로젝트 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 50
ChatClient 프로젝트 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 51
ChatClient UI만들기
IDC_BUTTON_CONNECT
IDC_BUTTON_DISCONNECT
IDC_LIST_DIALOG -> m_lcContent
IDC_BUTTON_SEND
IDC_EDIT_USER_ID
IDC_EDIT_MESSAGE
Copyright 2009 by CEBT
WP, 2009 Fall - 52
BOOL CChatClientDlg::m_bIsConnected 추가
서버와의 접속 여부를 저장함
SetConnected(BOOL bIsConnected)를 이용해 버튼 활성화 조절
OnInitialDialog()에서 호출하여 초기화
Copyright 2009 by CEBT
WP, 2009 Fall - 53
헤더 생성 및 초기화
Copyright 2009 by CEBT
WP, 2009 Fall - 54
초기화된 화면
Copyright 2009 by CEBT
WP, 2009 Fall - 55
CConnectSocket 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 56
CConnectSocket CChatClientDlg::m_ConnectSocket 추가
Copyright 2009 by CEBT
WP, 2009 Fall - 57
CConnectDlg 클래스 생성하여 Dialog와 연결
IDC_EDIT_URL -> m_strURL
IDC_EDIT_PORT -> m_nPort
Copyright 2009 by CEBT
WP, 2009 Fall - 58
void CChatClientDlg::OnButtonConnect() 정의
OnButtonDisconnect()도 정의
Copyright 2009 by CEBT
WP, 2009 Fall - 59
CChatClientDlg::SendMessageToServer() 정의
OnButtonSend()와 연결
Copyright 2009 by CEBT
WP, 2009 Fall - 60
CConnectSocket::OnRecieve(int nErrorCode)
Copyright 2009 by CEBT
WP, 2009 Fall - 61
CConnectSocket::OnCLose(int nErrorCode)
Copyright 2009 by CEBT
WP, 2009 Fall - 62
채팅 서버 및 클라이언트 실행
Copyright 2009 by CEBT
WP, 2009 Fall - 63
CChatServerView::OnSaveToDB() 생성
Copyright 2009 by CEBT
WP, 2009 Fall - 64
데이터베이스에 저장 및 서버 초기화
Copyright 2009 by CEBT
WP, 2009 Fall - 65
데이터베이스 내용 확인
Copyright 2009 by CEBT
WP, 2009 Fall - 66