-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
목차
1. 개 요
1.1 문서의 목적
1.2 시스템 개요
1.3 설계상 제약사항
1.4 참조된 개발 문서
2. 소프트웨어 설계
2.1 소프트웨어 구조
2.2 소프트웨어 모듈 설명
2.2.1 로그인
2.2.2 회원 가입
2.2.3 인스턴트 메시지
2.2.4 회의실
3. 모듈 명세
4. 데이터베이스 구조
4.1 회원가입 데이터 저장구조
4.2 친구 관리데이터 저장구조
5. 사용자 인터페이스 설계
5.1 인터페이스 설계의 기본원칙
5.2 예제 화면
6. 시스템 구조 설계
6.1 기본 구조
6.2 State Activity Diagram
6.2.1 로그인
6.2.2 회원 가입
6.2.3 인스턴트 메시지
6.2.4 회의실
6.3 Sequence Diagram
7. 개발 환경 명세
7.1 시험 환경 및 기법
7.2 모듈 시험계획
8. 요구사항 참조표
9. 기타 사항
참 고 문 헌
부록 #1 (소스코드)
1.1 문서의 목적
1.2 시스템 개요
1.3 설계상 제약사항
1.4 참조된 개발 문서
2. 소프트웨어 설계
2.1 소프트웨어 구조
2.2 소프트웨어 모듈 설명
2.2.1 로그인
2.2.2 회원 가입
2.2.3 인스턴트 메시지
2.2.4 회의실
3. 모듈 명세
4. 데이터베이스 구조
4.1 회원가입 데이터 저장구조
4.2 친구 관리데이터 저장구조
5. 사용자 인터페이스 설계
5.1 인터페이스 설계의 기본원칙
5.2 예제 화면
6. 시스템 구조 설계
6.1 기본 구조
6.2 State Activity Diagram
6.2.1 로그인
6.2.2 회원 가입
6.2.3 인스턴트 메시지
6.2.4 회의실
6.3 Sequence Diagram
7. 개발 환경 명세
7.1 시험 환경 및 기법
7.2 모듈 시험계획
8. 요구사항 참조표
9. 기타 사항
참 고 문 헌
부록 #1 (소스코드)
본문내용
ctiveView();
pFrame->MySNO = m_StudentNO;
pFrame->SendMessage(WM_COMMAND,IDM_CONNECT);
//소켓이 정상적으로 생성됐을때..
if(pFrame->m_Socket_State)
{
CData data;
//상대방에 전송할 부분
data.VariableReset();
data.m_MsgNO = LOGIN;
data.m_strData1 = m_StudentNO;
data.m_strData2 = m_UserPass;
UINT nTempPort;
pFrame->
m_DataSocket.GetSockName(data.m_strData3, nTempPort);
//네트워크연결시 데이터 전송
pFrame->m_DataSocket << data;
pFrame->m_DataSocket >> data;
switch(data.m_MsgNO)
{
case LOGIN_FAIL_ID:
AfxMessageBox("등록되어있지 않은 ID입니다. ");
pFrame->m_DataSocket.Close();
break;
case LOGIN_FAIL_PASS:
AfxMessageBox("비밀번호가 틀렸습니다.");
pFrame->m_DataSocket.Close();
break;
case LOGIN_OK:
{
pFrame->m_strMyNick = data.m_strData1;
pFrame->m_strMyName = data.m_strData2;
do
{
data.VariableReset();
pFrame->m_DataSocket >> data;
switch(data.m_MsgNO)
{
//자율그룹 정보 수신
case LOGIN_FREE_INFO:
{
DATA fdata;
fdata.m_NickName = data.m_strData1;
fdata.m_Name = data.m_strData2;
fdata.m_MailAddress = data.m_strData3;
fdata.m_GroupName = data.m_strData4;
fdata.m_IP = data.m_strData5;
fdata.m_UserCondition = data.m_strData6;
pFrame->m_FriendList.DataAdd(fdata);
pView->ControlTree(TREE_INIT, fdata.m_NickName, fdata.m_GroupName);
}
break;
case LOGIN_MESSAGE:
{
CClientView * pView = (CClientView *)pFrame->GetActiveView();
DATA BuddyData;
BuddyData = pFrame->m_FriendList.SearchData(data.m_strData1);
CMessageDlg * dlg = new CMessageDlg;
dlg->Create(IDD_MESSAGEDLG);
dlg->m_strBuddyName = BuddyData.m_NickName;
dlg->m_strBuddyIP = data.m_strData4;
dlg->m_strBuddyTalk = data.m_strData3;
dlg->m_strTime = data.m_strData2;
dlg->m_strName = pFrame->m_strMyNick;
dlg->UpdateData(FALSE);
dlg->ShowWindow(SW_SHOW);
}
break;
case LOGIN_SCHEDULE:break;
case LOGIN_NOTICE:break;
case LOGIN_ESSENTIAL_INFO:break;
case LOGIN_COMPLETE:
pFrame->m_strChatIP = data.m_strData2;
pFrame->m_DataSocket.Close();
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTART);
break;
default:
pFrame->m_DataSocket.Close();
}
}
while(data.m_MsgNO != LOGIN_COMPLETE/);
}
break;
default:
AfxMessageBox("서버에 문제가 생겼습니다.");
pFrame->m_DataSocket.Close();
}
}
EndDialog(pFrame->nLog);
/*//소켓이 정상 생성되지 못했을때
else
pFrame->m_DataSocket.Close();*/
}
}
// 메시지 보내기
void CMessageDlg::OnSend()
{
// TODO: Add your control notification handler code here
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();
CData data;
GetDlgItem(IDC_SENDDATA)->GetWindowText(m_strSendData);
data.m_MsgNO = BUDDY_MESSAGE;
data.m_strData1 = m_strBuddyName;
data.m_strData2 = m_strSendData;
data.m_strData3 = m_strName;
DATA BuddyData;
BuddyData = pFrame->m_FriendList.SearchData(m_strBuddyName);
if(BuddyData.m_UserCondition == "로그인")
{
pFrame->m_nConnectPort = 4000;
}
else
{
m_strBuddyIP = SERVER_IP;
data.m_strData4 = m_strTime;
pFrame->m_nConnectPort = 2000;
}
pFrame->m_strConnectIP = m_strBuddyIP;
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTOP);
pFrame->SendMessage(WM_COMMAND,IDM_CONNECT);
pFrame->m_DataSocket << data;
pFrame->m_DataSocket.Close();
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTART);
PostNcDestroy();
}
pFrame->MySNO = m_StudentNO;
pFrame->SendMessage(WM_COMMAND,IDM_CONNECT);
//소켓이 정상적으로 생성됐을때..
if(pFrame->m_Socket_State)
{
CData data;
//상대방에 전송할 부분
data.VariableReset();
data.m_MsgNO = LOGIN;
data.m_strData1 = m_StudentNO;
data.m_strData2 = m_UserPass;
UINT nTempPort;
pFrame->
m_DataSocket.GetSockName(data.m_strData3, nTempPort);
//네트워크연결시 데이터 전송
pFrame->m_DataSocket << data;
pFrame->m_DataSocket >> data;
switch(data.m_MsgNO)
{
case LOGIN_FAIL_ID:
AfxMessageBox("등록되어있지 않은 ID입니다. ");
pFrame->m_DataSocket.Close();
break;
case LOGIN_FAIL_PASS:
AfxMessageBox("비밀번호가 틀렸습니다.");
pFrame->m_DataSocket.Close();
break;
case LOGIN_OK:
{
pFrame->m_strMyNick = data.m_strData1;
pFrame->m_strMyName = data.m_strData2;
do
{
data.VariableReset();
pFrame->m_DataSocket >> data;
switch(data.m_MsgNO)
{
//자율그룹 정보 수신
case LOGIN_FREE_INFO:
{
DATA fdata;
fdata.m_NickName = data.m_strData1;
fdata.m_Name = data.m_strData2;
fdata.m_MailAddress = data.m_strData3;
fdata.m_GroupName = data.m_strData4;
fdata.m_IP = data.m_strData5;
fdata.m_UserCondition = data.m_strData6;
pFrame->m_FriendList.DataAdd(fdata);
pView->ControlTree(TREE_INIT, fdata.m_NickName, fdata.m_GroupName);
}
break;
case LOGIN_MESSAGE:
{
CClientView * pView = (CClientView *)pFrame->GetActiveView();
DATA BuddyData;
BuddyData = pFrame->m_FriendList.SearchData(data.m_strData1);
CMessageDlg * dlg = new CMessageDlg;
dlg->Create(IDD_MESSAGEDLG);
dlg->m_strBuddyName = BuddyData.m_NickName;
dlg->m_strBuddyIP = data.m_strData4;
dlg->m_strBuddyTalk = data.m_strData3;
dlg->m_strTime = data.m_strData2;
dlg->m_strName = pFrame->m_strMyNick;
dlg->UpdateData(FALSE);
dlg->ShowWindow(SW_SHOW);
}
break;
case LOGIN_SCHEDULE:break;
case LOGIN_NOTICE:break;
case LOGIN_ESSENTIAL_INFO:break;
case LOGIN_COMPLETE:
pFrame->m_strChatIP = data.m_strData2;
pFrame->m_DataSocket.Close();
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTART);
break;
default:
pFrame->m_DataSocket.Close();
}
}
while(data.m_MsgNO != LOGIN_COMPLETE/);
}
break;
default:
AfxMessageBox("서버에 문제가 생겼습니다.");
pFrame->m_DataSocket.Close();
}
}
EndDialog(pFrame->nLog);
/*//소켓이 정상 생성되지 못했을때
else
pFrame->m_DataSocket.Close();*/
}
}
// 메시지 보내기
void CMessageDlg::OnSend()
{
// TODO: Add your control notification handler code here
CMainFrame * pFrame = (CMainFrame *)AfxGetMainWnd();
CData data;
GetDlgItem(IDC_SENDDATA)->GetWindowText(m_strSendData);
data.m_MsgNO = BUDDY_MESSAGE;
data.m_strData1 = m_strBuddyName;
data.m_strData2 = m_strSendData;
data.m_strData3 = m_strName;
DATA BuddyData;
BuddyData = pFrame->m_FriendList.SearchData(m_strBuddyName);
if(BuddyData.m_UserCondition == "로그인")
{
pFrame->m_nConnectPort = 4000;
}
else
{
m_strBuddyIP = SERVER_IP;
data.m_strData4 = m_strTime;
pFrame->m_nConnectPort = 2000;
}
pFrame->m_strConnectIP = m_strBuddyIP;
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTOP);
pFrame->SendMessage(WM_COMMAND,IDM_CONNECT);
pFrame->m_DataSocket << data;
pFrame->m_DataSocket.Close();
pFrame->SendMessage(WM_COMMAND,IDM_SERVERSTART);
PostNcDestroy();
}
소개글