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

📄 sgrnetworkdialogset.cpp

📁 一个基于BREW上的WEB service程序,通过扫描图书的条形码,登陆WEB站点,利用SOAP-RPC来查询图书信息.
💻 CPP
字号:
#include "SGRNetworkDialogset.hpp"

SGRNetworkDialogSet::SGRNetworkDialogSet(Void) : _source(null), _spp(null), _reference(null), _dialog(null)
{
    return;
}

SGRNetworkDialogSet::~SGRNetworkDialogSet(Void)
{
    _source = null;
    _spp = null;
    _reference = null;
    _dialog = null;
    return;
}

SFCError SGRNetworkDialogSet::Open(SFXAnsiStringConstRef url, Bool isConfirm, NetworkDialogSetSPP procedure, VoidPtr data)
{
    SFCError error(SFERR_NO_ERROR);

    _url = url;
    _spp = procedure;
    _reference = data;
    if (isConfirm) { // 愙懕妋擣僟僀傾儘僌傪昞帵偡傞側傜
        SFRMultiDialog::ParamRec param;
        param.text = "僱僢僩儚乕僋愙懕傪奐巒偟傑偡偐丠";
        param.ok = "偼偄";
        param.cancel = "偄偄偊";
        param.another = "";                      // 嬻暥帤傪擖傟傞偲儃僞儞側偟
        param.focus = SFRMultiDialog::FOCUS_OK,  // 僼僅乕僇僗偺埵抲
        param.image = SFBImageSmp(null);         // 傾僀僐儞偺僀儊乕僕
        if ((_dialog = ::new SFRMultiDialog(
                SFXGraphics::GetDeviceRectangle().Deflate(20, 0).SetHeight(180).AddY(50),
                "愙懕", param)) != null) {

            SGRSoftkeyToolbox::OpenStandardDialog(_dialog, HANDLER_FUNCTION(OnDialog1));

            // 嫮惂嵞昤夋
            SFRApplication::GetInstance()->Invoke(
                SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, false));
        }
        else {
            error = SFERR_NO_MEMORY;
        }
    } else {
        if ((error = _http.Open(HttpNotifyEntry, this)) == SFERR_NO_ERROR) {
            _http.SetRequestMethod("GET");
            error = _http.Connect(_url.GetCString());
        }
        _spp(NOTIFY_CONNECT_START, error, _reference);
    }
    return error;
}

// 僟僀傾儘僌 僴儞僪儔偺掕媊
HANDLER_IMPLEMENT_VOIDDIALOG(SGRNetworkDialogSet, OnDialog1, result, dialog)
{
    SFCError error(SFERR_NO_ERROR);

    switch (result) {
        case SRP16_OK:         // OK 儃僞儞偑墴偝傟偨偲偒
            SGRSoftkeyToolbox::CloseStandardDialog(dialog);
            _dialog = ::new SFRFrameDialog(SFXGraphics::GetDeviceRectangle().Deflate(10, 50).SetHeight(100));
            if (_dialog != null) {
                // 僟僀傾儘僌偺昤夋僴儞僪儔傪搊榐
                error = _dialog->RegisterHandler(SREVT_RESPONDER_RENDER, SRP16_RENDER_CONTENT,
                    HANDLER_BEFORE, HANDLER_FUNCTION(OnDialogRender));
                if (error == SFERR_NO_ERROR) {
                    SGRSoftkeyToolbox::OpenStandardDialog(_dialog, HANDLER_NULL);
                }
            }
            _http.Open(HttpNotifyEntry, this);
            _http.SetRequestMethod("GET");
            _http.Connect(_url.GetCString());
            _spp(NOTIFY_CONNECT_START, error, _reference);
            break;
        case SRP16_CANCEL:     // CANCEL 儃僞儞偑墴偝傟偨偲偒
            _spp(NOTIFY_CONNECT_CANCEL, SFERR_NO_ERROR, _reference);
            SGRSoftkeyToolbox::CloseStandardDialog(dialog);
            break;
    }
}

Void SGRNetworkDialogSet::HttpNotify(SFUHttpConnection::NotifyEnum notify,
    SFCError error)
{
    unused(error);

    // HTTP 儗僗億儞僗偑庢摼偱偒偨応崌
    if (notify == SFUHttpConnection::NOTIFY_RESPONSE) {
        TRACE(">> NOTIFY RESPONSE");

        _source = _http.OpenInputStream(SourceNotifyEntry, this);
        if (_source != null) {
            TRACE(">> pre Fetch...");
            _source->Fetch();
        }
        else {
            TRACE(">> Cannot open source");
            _spp(NOTIFY_ERROR, error, _reference);
        }
    }
    else {
        TRACE(">> HTTP NOTIFY ERROR.");
        _spp(NOTIFY_ERROR, error, _reference);
    }
    TRACE(">> end HTTP NOTIFY");
}

Void SGRNetworkDialogSet::SourceNotify(SFUSourceStream::NotifyEnum notify, SFCError error)
{
    unused(error);
    TRACE(">> SOURCE NOTIFY");

    if (notify == SFUSourceStream::NOTIFY_READ) {
        while (_source->Available()) {
            SFXAnsiString str;
            *_source >> str;
            _string << str;
        }

        // 嵞搙僨乕僞傪庢摼偡傞
        if (_source->IsFetchable()) {
            TRACE(">> pre Refetch...");
            _source->Fetch();
        } else {
            TRACE(">> Cannot Fetch");
            if (_source->IsEOS()) {
                TRACE(">> end source");
                _http.Close();
                SGRSoftkeyToolbox::CloseStandardDialog(_dialog);
                SFRApplication::GetInstance()->Invoke(
                    SFXEvent(SREVT_RESPONDER_RENDER, SRP16_RENDER_INVOKE, true));
                _spp(NOTIFY_CONNECT_END, error, _reference);
            }
        }
    }
    else {
        TRACE(">> SOURCE NOTIFY ERROR");
        _spp(NOTIFY_ERROR, error, _reference);
    }
    TRACE(">> end SOURCE NOTIFY");
}

HANDLER_IMPLEMENT_VOIDRENDER(SGRNetworkDialogSet, OnDialogRender, graphics) {
    graphics->FillRectangle(SFXGraphics::GetDeviceRectangle(), SFXRGBColor(0xFF, 0xFF, 0xFF, 0x00));
    graphics->DrawString(
        "愙懕拞乧", SFXGraphics::GetDeviceRectangle().Deflate(10, 10), SFXRGBColor(0, 0, 0, 0),
        IDF_ALIGN_LEFT | IDF_ALIGN_MIDDLE);
}

⌨️ 快捷键说明

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