亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? server.cpp

?? 這個動態鏈接庫是Socket通過COm串口實現數據通信
?? CPP
字號:
///////////////////////////////////////////////////////////////////////////////
//
// File           : $Workfile: Server.cpp $
// Version        : $Revision: 1 $
// Function       : 
//
// Author         : $Author: Len $
// Date           : $Date: 3/06/02 11:37 $
//
// Notes          : 
//
// Modifications  :
//
// $Log: /Web Articles/SocketServers/COMSocketServer/COMSocketServer/Server.cpp $
// 
// 1     3/06/02 11:37 Len
// 
///////////////////////////////////////////////////////////////////////////////
//
// Copyright 1997 - 2002 JetByte Limited.
//
// JetByte Limited grants you ("Licensee") a non-exclusive, royalty free, 
// licence to use, modify and redistribute this software in source and binary 
// code form, provided that i) this copyright notice and licence appear on all 
// copies of the software; and ii) Licensee does not utilize the software in a 
// manner which is disparaging to JetByte Limited.
//
// This software is provided "as is" without a warranty of any kind. All 
// express or implied conditions, representations and warranties, including
// any implied warranty of merchantability, fitness for a particular purpose
// or non-infringement, are hereby excluded. JetByte Limited and its licensors 
// shall not be liable for any damages suffered by licensee as a result of 
// using, modifying or distributing the software or its derivatives. In no
// event will JetByte Limited be liable for any lost revenue, profit or data,
// or for direct, indirect, special, consequential, incidental or punitive
// damages, however caused and regardless of the theory of liability, arising 
// out of the use of or inability to use software, even if JetByte Limited 
// has been advised of the possibility of such damages.
//
// This software is not designed or intended for use in on-line control of 
// aircraft, air traffic, aircraft navigation or aircraft communications; or in 
// the design, construction, operation or maintenance of any nuclear 
// facility. Licensee represents and warrants that it will not use or 
// redistribute the Software for such purposes. 
//
///////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "COMSocketServer.h"
#include "Server.h"

#include "Address.h"
#include "Data.h"
#include "Socket.h"

#include "SocketServer.h"

#include "JetByteTools\Win32Tools\Exception.h"

///////////////////////////////////////////////////////////////////////////////
// Lint options
//
//lint -save
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Using directives
///////////////////////////////////////////////////////////////////////////////

using JetByteTools::Win32::CIOBuffer;
using JetByteTools::Win32::CException;

///////////////////////////////////////////////////////////////////////////////
// CAddress
///////////////////////////////////////////////////////////////////////////////

CServer::CServer()
   :  m_pIAddress(0),
      m_pIData(0),
      m_pIDataInit(0),
      m_asyncServerEventHelper(*this),
      m_pSocketServer(0)
{

}

CServer::~CServer()
{
   try
   {
      if (m_pSocketServer)
      {
         m_pSocketServer->WaitForShutdownToComplete();

         delete m_pSocketServer;
      }

      if (m_pIAddress)
      {
         m_pIAddress->Release();
      }

      if (m_pIData)
      {
         m_pIData->Release();
      }

      if (m_pIDataInit)
      {
         m_pIDataInit->Release();
      }
   }
   catch(...)
   {
   }
}

STDMETHODIMP CServer::InterfaceSupportsErrorInfo(REFIID riid)
{
	if (InlineIsEqualGUID(IID_IServer,riid))
   {
	   return S_OK;
	}

	return S_FALSE;
}

STDMETHODIMP CServer::get_LocalAddress(IAddress **ppVal)
{
   if (ppVal == 0)
   {
      return Error(L"ppVal is an invalid pointer", GUID_NULL, E_POINTER);
   }

   *ppVal = 0;

   if (!m_pIAddress)
   {
      return Error(L"Server hasn't been initialised - programming error!");
   }

   m_pIAddress->AddRef();

   *ppVal = m_pIAddress;

	return S_OK;
}

STDMETHODIMP CServer::StartListening()
{
   if (!m_pSocketServer)
   {
      return Error(L"Server hasn't been initialised - programming error!");
   }

   try
   {
      m_pSocketServer->StartAcceptingConnections();
   }
   catch(CException &e)
   {
      return ExceptionToError(e);
   }

	return S_OK;
}

STDMETHODIMP CServer::StopListening()
{
   if (!m_pSocketServer)
   {
      return Error( L"Server hasn't been initialised - programming error!");
   }

   try
   {
      m_pSocketServer->StopAcceptingConnections();
   }
   catch(CException &e)
   {
      return ExceptionToError(e);
   }

   return S_OK;
}

STDMETHODIMP CServer::Init(
   /*[in]*/ unsigned long address,
   /*[in]*/ unsigned short port)
{
   // create the socket server
   
   IAddressInit *pInit = 0;

   HRESULT hr = CAddress::CreateInstance(&pInit);

   if (SUCCEEDED(hr))
   {
      hr = pInit->Init(address, port);

      if (SUCCEEDED(hr))
      {
         hr = pInit->QueryInterface(&m_pIAddress);
      }

      pInit->Release();
   }

   if (SUCCEEDED(hr))
   {
      hr = CData::CreateInstance(&m_pIDataInit);

      if (SUCCEEDED(hr))
      {
         hr = m_pIDataInit->QueryInterface(&m_pIData);
      }
   }

   if (SUCCEEDED(hr))
   {
      try
      {
         // now create the socket server

         m_pSocketServer = new CCOMSocketServer(address, port, &m_asyncServerEventHelper);

         m_pSocketServer->Start();
      }
      catch(CException &e)
      {
         return ExceptionToError(e);
      }
   }

   return hr;
}

STDMETHODIMP CServer::OnEvent(
   long eventID)
{
   switch (eventID)
   {
      case 0 :

         return OnConnectionEstablished();

      break;

      case 1 :

         return OnDataRecieved();

      break;

      case 2 :

         return OnConnectionClosed();

      break;
   }

   return Error(L"Unexpected event in OnEvent() - programming error!");
}

HRESULT CServer::OnConnectionEstablished()
{
   CCOMSocketServer::Socket *pSocket = m_pSocketServer->GetSocket();

   // grab the socket, address and port, wrap in an ISocket, store the ISocket in the user data of the socket... 

   long address = m_pSocketServer->GetAddress();
   short port = m_pSocketServer->GetPort();

   // and then fire the event

   ISocketInit *pInit = 0;

   HRESULT hr = CSocket::CreateInstance(&pInit);

   if (SUCCEEDED(hr))
   {
      ISocket *pISocket = 0;
      
      hr = pInit->Init(address, port, pSocket);

      if (SUCCEEDED(hr))
      {
         hr = pInit->QueryInterface(&pISocket);
      }

      if (SUCCEEDED(hr))
      {
         pSocket->SetUserPtr(pISocket);
      }
   
      if (SUCCEEDED(hr))
      {
         Fire_OnConnectionEstablished(pISocket);
      }

      pInit->Release();
   }

   return hr;
}

HRESULT CServer::OnDataRecieved()
{
   if (!m_pSocketServer)
   {
      return Error(L"Server hasn't been initialised - programming error!");
   }

   if (!m_pIDataInit || !m_pIData)
   {
      return Error(L"Internal error: failed to create Data object");
   }
   
   CCOMSocketServer::Socket *pSocket = m_pSocketServer->GetSocket();

   CIOBuffer *pBuffer = m_pSocketServer->GetBuffer();

   if (!pSocket || !pBuffer)
   {
      return Error(L"Internal error: pSocket or pBuffer is 0");
   }

   ISocket *pISocket = reinterpret_cast<ISocket*>(pSocket->GetUserPtr());

   HRESULT hr = m_pIDataInit->Init(pBuffer->GetBuffer(), pBuffer->GetUsed());

   if (SUCCEEDED(hr))
   {  
      Fire_OnDataReceived(pISocket, m_pIData);   // this can stall if the handler doesnt return - 
                                                 // the ATL implementation is difficult to multi thread...
   }

   return hr;
}

HRESULT CServer::OnConnectionClosed()
{
   // retrieve socket 
   CCOMSocketServer::Socket *pSocket = m_pSocketServer->GetSocket();

   if (pSocket)
   {
      ISocket *pISocket = reinterpret_cast<ISocket *>(pSocket->GetUserPtr());

      if (pISocket)
      {
         Fire_OnConnectionClosed(pISocket);

         pISocket->Release();
      }

      pSocket->SetUserPtr(0);

      return S_OK;
   }

   return Error(L"Internal error: failed to obtain ISocket");
}

///////////////////////////////////////////////////////////////////////////////
// Lint options
//
//lint -restore
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// End of file...
///////////////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲福利一二三区| 精品一区二区影视| 91最新地址在线播放| 久久久久久97三级| 精品无人码麻豆乱码1区2区| 制服丝袜成人动漫| 天天综合色天天综合色h| 欧美猛男gaygay网站| 偷窥少妇高潮呻吟av久久免费| 欧美日韩精品高清| 亚洲成人一区二区在线观看| 欧美日韩一级视频| 日韩在线一区二区| 日韩视频永久免费| 美女一区二区三区| 久久亚洲私人国产精品va媚药| 国产一区二区在线观看免费| 久久免费视频色| 国产不卡视频在线播放| 欧美高清在线精品一区| 成人v精品蜜桃久久一区| 国产精品久久久久久久久搜平片| 成人app软件下载大全免费| 中文字幕一区二区三区蜜月| 色综合久久天天| 亚洲无线码一区二区三区| 欧美日韩二区三区| 免费欧美在线视频| 久久女同性恋中文字幕| 成人高清视频在线| 一区二区三区蜜桃网| 欧美精品 国产精品| 裸体健美xxxx欧美裸体表演| 久久网站热最新地址| 成人aa视频在线观看| 亚洲综合精品久久| 日韩三级中文字幕| 国产福利精品一区二区| 亚洲欧美一区二区视频| 欧美日韩亚洲高清一区二区| 另类的小说在线视频另类成人小视频在线 | 午夜不卡av免费| 日韩一区二区免费视频| 国产黄色成人av| 樱花草国产18久久久久| 91精品国产aⅴ一区二区| 国产一区二区在线看| 亚洲视频电影在线| 777久久久精品| 国产91富婆露脸刺激对白| 亚洲影院久久精品| 精品国内二区三区| 99国产精品视频免费观看| 亚洲福利电影网| 久久亚洲一级片| 在线亚洲免费视频| 奇米精品一区二区三区在线观看| 国产欧美一区二区在线| 欧美亚洲综合久久| 国产麻豆欧美日韩一区| 亚洲午夜视频在线观看| 久久欧美中文字幕| 欧美视频一区在线观看| 国产精品一区二区三区99| 亚洲综合图片区| 2020日本不卡一区二区视频| 日本丶国产丶欧美色综合| 捆绑调教美女网站视频一区| 亚洲精品国产无天堂网2021| 日韩免费视频线观看| 97久久超碰国产精品| 美女视频一区二区| 亚洲欧美日韩久久| 精品福利一区二区三区| 在线观看日产精品| 国产精品一区二区久久不卡| 亚洲成va人在线观看| 国产蜜臀97一区二区三区| 91精品国产乱| 色综合久久99| 国产精华液一区二区三区| 亚洲地区一二三色| 国产精品全国免费观看高清| 欧美一二三区在线| 91高清视频在线| 国产91丝袜在线播放0| 日韩电影免费在线观看网站| 一区二区在线观看视频在线观看| 久久久国际精品| 91精品国产手机| 91麻豆swag| 国产不卡高清在线观看视频| 免费三级欧美电影| 亚洲国产你懂的| 1000精品久久久久久久久| 欧美精品一区二区三区蜜桃| 欧美高清你懂得| 91福利国产精品| 99久久夜色精品国产网站| 国产精品18久久久久久vr| 午夜久久久久久电影| 亚洲欧美日韩综合aⅴ视频| 国产无一区二区| 精品国产青草久久久久福利| 欧美群妇大交群的观看方式| 色88888久久久久久影院按摩| 成人av在线播放网址| 国产精品一区二区久久不卡| 国内一区二区在线| 久久精品国内一区二区三区| 日韩中文字幕av电影| 亚洲地区一二三色| 亚洲国产欧美在线人成| 亚洲综合在线电影| 亚洲欧美偷拍卡通变态| 亚洲婷婷综合久久一本伊一区 | 日韩一级完整毛片| 欧美精品久久天天躁| 欧美日韩一卡二卡| 欧美日韩视频一区二区| 欧美三级日韩三级国产三级| 91高清视频免费看| 色猫猫国产区一区二在线视频| 91天堂素人约啪| 91啪在线观看| 色哟哟国产精品| 一本久久a久久免费精品不卡| 91蜜桃视频在线| 一本色道久久综合亚洲91| 色综合天天做天天爱| 色婷婷久久一区二区三区麻豆| 91亚洲国产成人精品一区二区三| a4yy欧美一区二区三区| 97精品电影院| 色视频一区二区| 色猫猫国产区一区二在线视频| 在线观看91精品国产入口| 欧美日韩一级黄| 欧美一二三四在线| 久久蜜桃av一区精品变态类天堂 | 亚洲午夜私人影院| 亚洲h在线观看| 日本欧美肥老太交大片| 狂野欧美性猛交blacked| 国产精品亚洲综合一区在线观看| 国产成+人+日韩+欧美+亚洲| 99v久久综合狠狠综合久久| 91香蕉视频污在线| 欧美中文一区二区三区| 色诱亚洲精品久久久久久| 欧美亚洲国产一区二区三区va| 欧美老年两性高潮| 欧美一卡在线观看| 欧美第一区第二区| 国产欧美日韩三区| 亚洲人成精品久久久久| 亚洲一级在线观看| 日日夜夜精品视频天天综合网| 极品少妇一区二区| 不卡一区二区中文字幕| 色噜噜偷拍精品综合在线| 91精品国产全国免费观看 | 国产片一区二区| 亚洲精品欧美激情| 婷婷开心久久网| 国产福利一区二区三区视频| 色婷婷一区二区三区四区| 91精品福利在线一区二区三区| 久久久国产一区二区三区四区小说| 亚洲欧美一区二区视频| 视频一区二区三区在线| 国产精品18久久久久久久久| 在线视频中文字幕一区二区| 日韩三区在线观看| 国产精品久久久久久久第一福利| 亚洲国产人成综合网站| 国内精品伊人久久久久av影院 | 99国产精品国产精品毛片| 欧美日高清视频| 久久九九99视频| 亚洲成人777| 丁香婷婷综合网| 欧美日韩国产综合草草| 久久精品视频在线看| 一区二区三区日韩精品| 国产在线视视频有精品| 色欧美88888久久久久久影院| 欧美一区二区高清| 成人欧美一区二区三区1314| 日韩av高清在线观看| 成人app网站| 欧美zozozo| 亚洲一区欧美一区| 国产a级毛片一区| 7777精品伊人久久久大香线蕉最新版| 国产日产精品一区| 日韩高清一区二区| 91同城在线观看| www亚洲一区| 亚洲h精品动漫在线观看|