diff options
Diffstat (limited to 'cpp/demo/Ice/MFC/client/HelloClientDlg.cpp')
-rw-r--r-- | cpp/demo/Ice/MFC/client/HelloClientDlg.cpp | 482 |
1 files changed, 0 insertions, 482 deletions
diff --git a/cpp/demo/Ice/MFC/client/HelloClientDlg.cpp b/cpp/demo/Ice/MFC/client/HelloClientDlg.cpp deleted file mode 100644 index 5a87cadfc37..00000000000 --- a/cpp/demo/Ice/MFC/client/HelloClientDlg.cpp +++ /dev/null @@ -1,482 +0,0 @@ -// ********************************************************************** -// -// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved. -// -// This copy of Ice is licensed to you under the terms described in the -// ICE_LICENSE file included in this distribution. -// -// ********************************************************************** - -#include "stdafx.h" -#include "HelloClient.h" -#include "HelloClientDlg.h" - -#include <iomanip> - -#ifdef _DEBUG -#define new DEBUG_NEW -#endif - -#define WM_AMI_CALLBACK (WM_USER + 1) - -using namespace std; -using namespace Demo; - -namespace -{ - -class Dispatcher : public Ice::Dispatcher -{ -public: - - Dispatcher(CHelloClientDlg* dialog) : _dialog(dialog) - { - } - - virtual void - dispatch(const Ice::DispatcherCallPtr& call, const Ice::ConnectionPtr&) - { - // - // Dispatch Ice AMI callbacks with the event loop thread. - // - _dialog->PostMessage(WM_AMI_CALLBACK, 0, reinterpret_cast<LPARAM>(new Ice::DispatcherCallPtr(call))); - } - -private: - - CHelloClientDlg* _dialog; -}; - -class Callback : public IceUtil::Shared -{ -public: - - Callback(CHelloClientDlg* dialog) : _dialog(dialog) - { - } - - void - sent(bool) - { - _dialog->sent(); - } - - void - response() - { - _dialog->response(); - } - - void - exception(const Ice::Exception& ex) - { - _dialog->exception(ex); - } - - void - flushSent(bool) - { - _dialog->flushed(); - } - -private: - - CHelloClientDlg* _dialog; -}; -typedef IceUtil::Handle<Callback> CallbackPtr; - -enum DeliveryMode -{ - TWOWAY, - TWOWAY_SECURE, - ONEWAY, - ONEWAY_SECURE, - ONEWAY_BATCH, - ONEWAY_SECURE_BATCH, - DATAGRAM, - DATAGRAM_BATCH -}; - -} - -BEGIN_MESSAGE_MAP(CHelloClientDlg, CDialog) - ON_WM_PAINT() - ON_WM_QUERYDRAGICON() - ON_WM_HSCROLL() - ON_CBN_SELENDOK(IDC_MODE, OnModeChanged) - ON_EN_CHANGE(IDC_HOST, OnHostChanged) - ON_BN_CLICKED(IDC_INVOKE, OnSayHello) - ON_BN_CLICKED(IDC_FLUSH, OnFlush) - ON_BN_CLICKED(IDC_SHUTDOWN, OnShutdown) - ON_MESSAGE(WM_AMI_CALLBACK, OnAMICallback) -END_MESSAGE_MAP() - - -CHelloClientDlg::CHelloClientDlg(CWnd* pParent /*=NULL*/) : CDialog(CHelloClientDlg::IDD, pParent) -{ - _hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); - - // - // Create the communicator. - // - Ice::InitializationData initData; - initData.properties = Ice::createProperties(); - initData.properties->load("config"); - initData.dispatcher = new Dispatcher(this); - _communicator = Ice::initialize(initData); - - // - // Create AMI callbacks. - // - CallbackPtr cb = new Callback(this); - _sayHelloCallback = newCallback_Hello_sayHello(cb, &Callback::response, &Callback::exception, &Callback::sent); - _shutdownCallback = newCallback_Hello_shutdown(cb, &Callback::response, &Callback::exception); - _flushCallback = Ice::newCallback_Object_ice_flushBatchRequests(cb, &Callback::exception, &Callback::flushSent); -} - -void -CHelloClientDlg::DoDataExchange(CDataExchange* pDX) -{ - CDialog::DoDataExchange(pDX); -} - - -BOOL -CHelloClientDlg::OnInitDialog() -{ - CDialog::OnInitDialog(); - - // Set the icon for this dialog. The framework does this automatically - // when the application's main window is not a dialog - SetIcon(_hIcon, TRUE); // Set big icon - SetIcon(_hIcon, FALSE); // Set small icon - - // - // Retrieve the controls. - // - _host = (CEdit*)GetDlgItem(IDC_HOST); - _mode = (CComboBox*)GetDlgItem(IDC_MODE); - _timeout = (CSliderCtrl*)GetDlgItem(IDC_TIMEOUT_SLIDER); - _timeoutStatus = (CStatic*)GetDlgItem(IDC_TIMEOUT_STATUS); - _delay = (CSliderCtrl*)GetDlgItem(IDC_DELAY_SLIDER); - _delayStatus = (CStatic*)GetDlgItem(IDC_DELAY_STATUS); - _status = (CStatic*)GetDlgItem(IDC_STATUSBAR); - _flush = (CButton*)GetDlgItem(IDC_FLUSH); - - // - // Use twoway mode as the initial default. - // - _mode->SetCurSel(TWOWAY); - - // - // Disable flush - // - _flush->EnableWindow(FALSE); - - // - // Set hostname - // - _host->SetWindowText(CString("127.0.0.1")); - - // - // Initialize timeout slider - // - _timeout->SetRangeMin(0); - _timeout->SetRangeMax(50); - _timeoutStatus->SetWindowText(CString("0.0s")); - - // - // Initialize delay slider - // - _delay->SetRangeMin(0); - _delay->SetRangeMax(50); - _delayStatus->SetWindowText(CString("0.0s")); - - updateProxy(); - _status->SetWindowText(CString(" Ready")); - - return TRUE; // return TRUE unless you set the focus to a control -} - -void -CHelloClientDlg::OnClose() -{ - // - // Destroy the communicator. If AMI calls are still in progress they will be - // interrupted with an Ice::CommunicatorDestroyedException. - // - try - { - _communicator->destroy(); - } - catch(const IceUtil::Exception&) - { - } -} - -// If you add a minimize button to your dialog, you will need the code below -// to draw the icon. For MFC applications using the document/view model, -// this is automatically done for you by the framework. - -void -CHelloClientDlg::OnPaint() -{ - if(IsIconic()) - { - CPaintDC dc(this); // device context for painting - - SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); - - // Center icon in client rectangle - int cxIcon = GetSystemMetrics(SM_CXICON); - int cyIcon = GetSystemMetrics(SM_CYICON); - CRect rect; - GetClientRect(&rect); - int x = (rect.Width() - cxIcon + 1) / 2; - int y = (rect.Height() - cyIcon + 1) / 2; - - // Draw the icon - dc.DrawIcon(x, y, _hIcon); - } - else - { - CDialog::OnPaint(); - } -} - -// The system calls this function to obtain the cursor to display while the user drags -// the minimized window. -HCURSOR -CHelloClientDlg::OnQueryDragIcon() -{ - return static_cast<HCURSOR>(_hIcon); -} - -void -CHelloClientDlg::OnHostChanged() -{ - updateProxy(); -} - -void -CHelloClientDlg::OnModeChanged() -{ - updateProxy(); -} - -void -CHelloClientDlg::OnHScroll(UINT, UINT, CScrollBar* scroll) -{ - CSliderCtrl* slider = (CSliderCtrl*)scroll; - ostringstream s; - if(slider == _timeout) - { - s << setiosflags(ios::fixed) << setprecision(1) << (long)_timeout->GetPos()/10.0 << "s"; - _timeoutStatus->SetWindowText(CString(s.str().c_str())); - } - else - { - s << setiosflags(ios::fixed) << setprecision(1) << (long)_delay->GetPos()/10.0 << "s"; - _delayStatus->SetWindowText(CString(s.str().c_str())); - } - updateProxy(); -} - -void -CHelloClientDlg::OnSayHello() -{ - if(!_helloPrx) - { - return; - } - int delay = _delay->GetPos() * 100; - try - { - if(!deliveryModeIsBatch()) - { - _status->SetWindowText(CString(" Sending request")); - _helloPrx->begin_sayHello(delay, _sayHelloCallback); - } - else - { - _flush->EnableWindow(TRUE); - _helloPrx->sayHello(delay); - _status->SetWindowText(CString(" Queued sayHello request")); - } - } - catch(const IceUtil::Exception& ex) - { - handleException(ex); - } -} - -void -CHelloClientDlg::OnShutdown() -{ - if(!_helloPrx) - { - return; - } - try - { - if(!deliveryModeIsBatch()) - { - _status->SetWindowText(CString(" Sending request")); - CallbackPtr cb = new Callback(this); - _helloPrx->begin_shutdown(_shutdownCallback); - } - else - { - _flush->EnableWindow(TRUE); - _helloPrx->shutdown(); - _status->SetWindowText(CString(" Queued shutdown request")); - } - } - catch(const IceUtil::Exception& ex) - { - handleException(ex); - } -} - -void -CHelloClientDlg::OnFlush() -{ - if(!_helloPrx) - { - return; - } - try - { - _helloPrx->begin_ice_flushBatchRequests(_flushCallback); - } - catch(const IceUtil::Exception& ex) - { - handleException(ex); - } - _flush->EnableWindow(FALSE); -} - -LRESULT -CHelloClientDlg::OnAMICallback(WPARAM, LPARAM lParam) -{ - try - { - Ice::DispatcherCallPtr* call = reinterpret_cast<Ice::DispatcherCallPtr*>(lParam); - (*call)->run(); - delete call; - } - catch(const Ice::Exception& ex) - { - handleException(ex); - } - return 0; -} - -void -CHelloClientDlg::sent() -{ - int mode = _mode->GetCurSel(); - if(mode == TWOWAY || mode == TWOWAY_SECURE) - { - _status->SetWindowText(CString(" Waiting for response")); - } - else - { - _status->SetWindowText(CString(" Ready")); - } -} - -void -CHelloClientDlg::response() -{ - _status->SetWindowText(CString(" Ready")); -} - -void -CHelloClientDlg::exception(const Ice::Exception& ex) -{ - if(!dynamic_cast<const Ice::CommunicatorDestroyedException*>(&ex)) - { - handleException(ex); - } -} - -void -CHelloClientDlg::flushed() -{ - _status->SetWindowText(CString(" Flushed batch requests")); -} - -void -CHelloClientDlg::updateProxy() -{ - CString h; - _host->GetWindowText(h); - string host = IceUtil::wstringToString(wstring(h), IceUtil::getProcessStringConverter()); - if(host.size() == 0) - { - _status->SetWindowText(CString(" No hostname")); - _helloPrx = 0; - return; - } - - string s = "hello:tcp -h " + host + " -p 10000:ssl -h " + host + " -p 10001:udp -h " + host + " -p 10000"; - Ice::ObjectPrx prx = _communicator->stringToProxy(s); - - int mode = _mode->GetCurSel(); - switch(mode) - { - case TWOWAY: - prx = prx->ice_twoway(); - break; - case TWOWAY_SECURE: - prx = prx->ice_twoway()->ice_secure(true);; - break; - case ONEWAY: - prx = prx->ice_oneway(); - break; - case ONEWAY_SECURE: - prx = prx->ice_oneway()->ice_secure(true); - break; - case ONEWAY_BATCH: - prx = prx->ice_batchOneway(); - break; - case ONEWAY_SECURE_BATCH: - prx = prx->ice_batchOneway()->ice_secure(true); - break; - case DATAGRAM: - prx = prx->ice_datagram(); - break; - case DATAGRAM_BATCH: - prx = prx->ice_batchDatagram(); - break; - } - - int timeout = _timeout->GetPos() * 100; - if(timeout != 0) - { - prx = prx->ice_invocationTimeout(timeout); - } - - _helloPrx = Demo::HelloPrx::uncheckedCast(prx); - - // - // The batch requests associated to the proxy are lost when we - // update the proxy. - // - _flush->EnableWindow(FALSE); -} - -BOOL -CHelloClientDlg::deliveryModeIsBatch() -{ - return _mode->GetCurSel() == ONEWAY_BATCH || - _mode->GetCurSel() == ONEWAY_SECURE_BATCH || - _mode->GetCurSel() == DATAGRAM_BATCH; -} - -void -CHelloClientDlg::handleException(const IceUtil::Exception& ex) -{ - _status->SetWindowText(CString(ex.ice_name().c_str())); -} |