⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 superserverview.cpp

📁 是一个基于C/S的Acess数据库例子
💻 CPP
字号:
// SuperServerView.cpp : implementation of the CSuperServerView class
//

#include "stdafx.h"
#include "SuperServer.h"

#include "SuperServerSet.h"
#include "SuperServerDoc.h"
#include "SuperServerView.h"
#include "Finddlg2.h"
#include "adddlg.h"
#include "portdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSuperServerView

IMPLEMENT_DYNCREATE(CSuperServerView, CDaoRecordView)

BEGIN_MESSAGE_MAP(CSuperServerView, CDaoRecordView)
	//{{AFX_MSG_MAP(CSuperServerView)
	ON_COMMAND(ID_START_SERVER, OnStartServer)
	ON_COMMAND(ID_STOP_SERVER, OnStopServer)
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
	ON_BN_CLICKED(IDC_BUTTON_DEL, OnButtonDel)
	ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify)
	ON_BN_CLICKED(IDC_BUTTON_FIND, OnButtonFind)
	ON_BN_CLICKED(IDC_BUTTON_B, OnButtonBack)
	ON_BN_CLICKED(IDC_BUTTON_F, OnButtonForward)
	ON_COMMAND(ID_SET_PORT, OnSetPort)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSuperServerView construction/destruction

CSuperServerView::CSuperServerView()
	: CDaoRecordView(CSuperServerView::IDD)
{
	//{{AFX_DATA_INIT(CSuperServerView)
	m_pSet = NULL;
	m_iPort=1234;
	//}}AFX_DATA_INIT
	// TODO: add construction code here

}

CSuperServerView::~CSuperServerView()
{
}

void CSuperServerView::DoDataExchange(CDataExchange* pDX)
{
	CDaoRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSuperServerView)
	DDX_Control(pDX, IDC_STATIC_STATE, m_staState);
	DDX_FieldText(pDX, IDC_EDIT1, m_pSet->m_No, m_pSet);
	DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_Name, m_pSet);
	DDX_FieldText(pDX, IDC_EDIT3, m_pSet->m_Password, m_pSet);
	DDX_FieldText(pDX, IDC_EDIT5, m_pSet->m_G_, m_pSet);
	//}}AFX_DATA_MAP
}

BOOL CSuperServerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CDaoRecordView::PreCreateWindow(cs);
}

void CSuperServerView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_superServerSet;
	CDaoRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();

}

/////////////////////////////////////////////////////////////////////////////
// CSuperServerView diagnostics

#ifdef _DEBUG
void CSuperServerView::AssertValid() const
{
	CDaoRecordView::AssertValid();
}

void CSuperServerView::Dump(CDumpContext& dc) const
{
	CDaoRecordView::Dump(dc);
}

CSuperServerDoc* CSuperServerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSuperServerDoc)));
	return (CSuperServerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSuperServerView database support
CDaoRecordset* CSuperServerView::OnGetRecordset()
{
	return m_pSet;
}

void CSuperServerView::MyAccept()
{
    for(int i=0;i<Max;i++)
	{
		if(!m_SocketClient[i].m_bBusy)
     	{
			 m_pSocket->Accept (m_SocketClient[i]);
             m_SocketClient[i].GetView (this);
			 break;
		}
	}
    
}

void CSuperServerView::MyClose(CSocketClient *pClient)
{
        pClient->Close();
	    pClient->m_bBusy=false;
}

void CSuperServerView::MyReceive(CSocketClient *pClient)
{
	m_pSF=new CSocketFile(pClient);
	m_pArIn=new CArchive(m_pSF,CArchive::load);
    msg.Serialize (*m_pArIn);
	int i;	
	bool bOK=false;
	switch(msg.m_eType )
	{
	case LOGIN:
		m_pSF=new CSocketFile(pClient);
		m_pArOut=new CArchive(m_pSF,CArchive::store);
		msg.m_eType =LOGINResponse;
		if(CheckLogin(pClient))
		{
			if(!pClient->m_bBoss)
			{
				msg.m_strMsg="GOOD|欢迎!";
			    bOK=true;
			}
			else
			{
		        msg.m_strMsg="GOOD|BOSS";
			    bOK=true;
			}
		}
		else
		{
			 msg.m_strMsg="FAILED|验证失败!";
		}			
		msg.Serialize (*m_pArOut);
		m_pArOut->Flush ();
		if(bOK) SendUserList();
		break;
	case CHATTING:
        for(i=0;i<Max;i++)
		{
		   if(m_SocketClient[i].m_bBusy)
               if(m_SocketClient[i].m_strName ==Decode(1,msg.m_strMsg))
			   {
				  m_pSF=new CSocketFile(&m_SocketClient[i]);
		          m_pArOut=new CArchive(m_pSF,CArchive::store);
			      msg.m_strMsg=pClient->m_strName+"|"+Decode(2,msg.m_strMsg);
		          msg.Serialize (*m_pArOut);
				  m_pArOut->Flush ();
			      break;
			   }
		}        
        break;
	case NOTICE:
		msg.m_strMsg=pClient->m_strName+"|"+Decode(2,msg.m_strMsg);
		for(i=0;i<Max;i++)
		{
		   if(m_SocketClient[i].m_bBusy && m_SocketClient[i].m_strName !=pClient->m_strName)
		   {
				  m_pSF=new CSocketFile(&m_SocketClient[i]);
		          m_pArOut=new CArchive(m_pSF,CArchive::store);
		          msg.Serialize (*m_pArOut);
				  m_pArOut->Flush ();
		   }
		}        
		break;

	}
}


bool CSuperServerView::CheckLogin(CSocketClient *pClient)
{
/*	LPCTSTR  lpszPathName;
	lpszPathName = "data2.mdb";		
    CDaoDatabase* tmpDB = new CDaoDatabase;
	try{	
		tmpDB->Open(lpszPathName);
	}
	catch (CDaoException* e)
	{
		delete tmpDB; 		
		e->Delete();
		return FALSE;
	}
	/*if (m_pDB)	{
		if (m_pDB->IsOpen())
	        m_pDB->Close();
		delete m_pDB;
	}*/
    /*m_pDB = tmpDB;
	CDaoRecordset rs(m_pDB);
    try
	{
	   CString Name=Decode(1,msg.m_strMsg);
	   CString Password=Decode(2,msg.m_strMsg);
	   CString strSQL(_T(" Select * From [User] where Name='"+Name+"' and Password='"+Password+"'"));
	   rs.Open(dbOpenDynaset,strSQL);
	   if(!rs.IsEOF())
	   {		 
		   pClient->m_strName=Name;
		   pClient->m_bBusy =true;
		   return true;
	   }
	   else
	   {
		  pClient->Close ();
		  return false;
	   }
	}
    catch (CDaoException* e)
	{
		e->Delete();
		return false;
	}
	return false;*/
	CString Name=Decode(1,msg.m_strMsg);
	CString Password=Decode(2,msg.m_strMsg);
	m_pSet->MoveFirst ();
	while(!m_pSet->IsEOF ())
	{
		if(m_pSet->m_Name==Name&& m_pSet->m_Password==Password)
		{
		   pClient->m_strName=Name;
		   pClient->m_bBusy =true;
		   if(m_pSet->m_G_==0) pClient->m_bBoss=true;
		   return true;
		}
	    m_pSet->MoveNext ();
	}
	return false;
}

void CSuperServerView::SendUserList()
{
	msg.m_eType =USERList;	
	msg.m_strMsg="END";
	for(int i=0;i<Max;i++)
	{
		if(m_SocketClient[i].m_bBusy)
		{
             msg.m_strMsg=m_SocketClient[i].m_strName+"|"+msg.m_strMsg;
		}
	}    
	for(i=0;i<Max;i++)
	{
		if(m_SocketClient[i].m_bBusy)
		{
           	m_pSF=new CSocketFile(&m_SocketClient[i]);
	        m_pArOut=new CArchive(m_pSF,CArchive::store);
			msg.Serialize (*m_pArOut);
	        m_pArOut->Flush (); 
		}
	}    
}

CString CSuperServerView::Decode(int n,CString strMsg)
{
	   int pos;
	   CString str;
	   for(int i=1;i<=n;i++)
	   {
	       pos=strMsg.Find ("|",0);
	       if(pos<0)
			   str=strMsg;
		   else
		       str=strMsg.Left (pos);
		   strMsg=strMsg.Right(strMsg.GetLength ()-pos-1);
	   }
	   return str;
}


/////////////////////////////////////////////////////////////////////////////
// CSuperServerView message handlers

void CSuperServerView::OnStartServer() 
{
    m_pSocket=new CSocketListen(this);
	m_pSocket->Create (m_iPort,SOCK_STREAM);
	m_pSocket->Listen ();
	m_staState.SetWindowText("正在监听......");
}

void CSuperServerView::OnStopServer() 
{
	if(m_pSocket) m_pSocket->Close ();
	for(int i=0;i<Max;i++)
	{
		if(m_SocketClient[i].m_bBusy)
		 {
              m_SocketClient[i].Close();
			  m_SocketClient[i].m_bBusy=false;
		 }
		}     

	m_staState.SetWindowText("服务关闭");	
}

void CSuperServerView::OnButtonAdd() //添加帐户
{
 	CAddDlg dlg;
	if(dlg.DoModal()==IDOK)
	{ 
        if(dlg.m_strName!="")
		{
			 m_pSet->AddNew ();
			 m_pSet->m_Name=dlg.m_strName;
			 m_pSet->m_Password=dlg.m_strPwd;
			 m_pSet->m_G_=dlg.m_iG;
			 m_pSet->Update ();
			 UpdateData(FALSE);
		}

	}	
	
}

void CSuperServerView::OnButtonDel()     //删除帐户
{
 	m_pSet->Delete (); 
	m_pSet->MoveNext ();
	if(m_pSet->IsEOF ())
	   m_pSet->MoveFirst();
	UpdateData(FALSE);
	
}

void CSuperServerView::OnButtonModify()  //修改帐户信息
{
	CAddDlg dlg;
	dlg.m_strName=m_pSet->m_Name;
	dlg.m_strPwd=m_pSet->m_Password;
	dlg.m_iG=m_pSet->m_G_;
	if(dlg.DoModal()==IDOK)
	{ 
        if(dlg.m_strName!="")
		{
			 m_pSet->Edit ();
			 m_pSet->m_Name=dlg.m_strName;
			 m_pSet->m_Password=dlg.m_strPwd;
			 m_pSet->m_G_=dlg.m_iG;
			 m_pSet->Update ();
			 UpdateData(FALSE);
		}
	}

}

void CSuperServerView::OnButtonFind() // 查找帐户
{
 	CFindDLG dlg;
	if(dlg.DoModal()==IDOK)
	{ 
        if(dlg.m_strKey!="")
		{
	 		CString m_strName;
		    UpdateData(TRUE);
	    	m_strName=dlg.m_strKey ;
		    if(m_pSet->IsOpen ())
			   m_pSet->Close ();
		    m_pSet->Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM user where Name='"+m_strName+"'");
		    UpdateData(FALSE);
		}
	}

}

void CSuperServerView::OnButtonBack()
{
    m_pSet->MovePrev();
	if(m_pSet->IsBOF ())
	   m_pSet->MoveLast();
	UpdateData(FALSE);
}

void CSuperServerView::OnButtonForward() 
{
   	m_pSet->MoveNext ();
	if(m_pSet->IsEOF ())
		m_pSet->MoveFirst();
	UpdateData(FALSE);
}

void CSuperServerView::OnSetPort() 
{
	CPortDlg dlg;
	dlg.m_iPort =m_iPort;
	if(dlg.DoModal ()==IDOK)
	{
		m_iPort=dlg.m_iPort ;
	}

	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -