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