HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2025
0224
GENKIhttploadのエラーからの復帰方法5解決


GENKI

リンク

2025/2/24(Mon) 21:36:32|NO.103117

 httploadとhttpinfoの使い方に関する質問です。

 httploadに渡すurlに間違えて存在しないサーバーや、サーバーではない文字列を渡してしまった場合、httpinfoはHTTPMODE_ERRORを返します。その後、正しいurlをhttploadに渡しなおしてもhttpinfoは常にHTTPMODE_ERRORを返すようになってしまいます。やり方が悪いのか、エラーからの復帰ができません。
 エラー発生後に復帰させるための処置方法はどのようにするのが良いのでしょうか。無効なurlはある程度、事前にチェックするとしても完全にはできないので事後処理必須です。

 以下は問題を確認するためのスクリプトです。(テスト環境 HSP3.7β10)

#include "hsp3dish.as" ; 画像URLリスト ; 画像の出典:https://maps.gsi.go.jp/development/ichiran.html sdim img_urls, 128, 3 img_urls(0) = "https://cyberjapandata.gsi.go.jp/xyz/std/15/29099/12902.png" img_urls(1) = "https://cyberjapandata.gsi.go.jp/xyz/std/15/29098/12902.png" img_urls(2) = "https://cyberjapandata.gsi.go.jp/xyz/std/15/29097/12902.png" dim wid, 3 wid = 1,2,3 idLoad = 0 dim stateLoad, 3 ; 0 初期状態 ; 1 ロード中 ; 2 ロードが正常終了した ; 3 ロードが異常終了した ;------------------------------ ; エラーを起こすためのurl ;------------------------------ ; 2個目の画像のurlを正しくないものに置き換えます。 ; ①存在しないサーバーを指定した場合 ; 「リクエストができませんでした」となり、処理が継続できない。 ;img_urls(1) = "https://aaaabbbbcccc.jp/" ; ②サーバーではない文字列を渡した場合 ; 「無効なサーバーが指定されました」となり、処理が継続できない。 ;img_urls(1) = "" ; ③404の画像アドレスの場合 ; エラーにはならないので処理が継続されます。 ; 2個目の画像のみ読み込まれませんが、処理は継続されて3つ目の画像も読み込まれます。 ;img_urls(1) = "https://cyberjapandata.gsi.go.jp/xyz/std/none.png" ;------------------------------ ; メインループ ;------------------------------ *main redraw 1 : await 16 : redraw 0 : color 255, 255, 255 : boxf : color : pos 0,0 if idLoad < 3 { if stateLoad(idLoad) = 0 { stateLoad(idLoad) = 1 httpload img_urls(idLoad) if stat : gosub *bad } ; 結果待ちのためのループ if stateLoad(idLoad) { httpinfo res, HTTPINFO_MODE if res = HTTPMODE_NONE : logmes "" + idLoad + ":通信初期化エラー " + HTTPMODE_NONE if res = HTTPMODE_READY : logmes "" + idLoad + ":通信可能状態 " + HTTPMODE_READY if res = HTTPMODE_REQUEST : logmes "" + idLoad + ":リクエスト通信準備 " + HTTPMODE_REQUEST if res = HTTPMODE_SEND : logmes "" + idLoad + ":リクエスト送信 " + HTTPMODE_SEND if res = HTTPMODE_DATAWAIT : logmes "" + idLoad + ":通信結果待機中 " + HTTPMODE_DATAWAIT if res = HTTPMODE_DATAEND : logmes "" + idLoad + ":通信終了 " + HTTPMODE_DATAEND if res = HTTPMODE_ERROR : logmes "" + idLoad + ":エラー発生 " + HTTPMODE_ERROR if res = HTTPMODE_READY : gosub *comp if res <= HTTPMODE_NONE : gosub *bad } ; 次を読み込み if stateLoad(idLoad) >= 2 : idLoad++ } ; 画像を表示 if stateLoad(0) = 2 : pos 10, 70 : celput wid(0), 0 if stateLoad(1) = 2 : pos 50, 120 : celput wid(1), 0 if stateLoad(2) = 2 : pos 100, 170 : celput wid(2), 0 ; 読み込みの状態 pos 10, 10 repeat 3 mes "stateLoad = "+stateLoad(cnt) loop goto *main ;------------------------------ ; エラー処理 ;------------------------------ ; 「無効なサーバーが指定されました」 ; https:以外が指定された。 ; ; 「リクエストができませんでした」 ; 存在しないサーバーが指定された。 *bad stateLoad(idLoad) = 3 httpinfo estr, HTTPINFO_ERROR logmes "Error : " + estr logmes img_urls(idLoad) return ;------------------------------ ; ダウンロード完了 ;------------------------------ *comp stateLoad(idLoad) = 3 httpinfo buf,HTTPINFO_DATA httpinfo size,HTTPINFO_SIZE if size <= 0 { message = "Error:データがありません。" return } if (peek(buf, 0) ! 0x89) & (peek(buf, 1) ! 0x50) & (peek(buf, 2) ! 0x4E) { ; PNG message = "Error:画像がありません。" return } stateLoad(idLoad) = 2 ; メモリストリームで読み込む memfile buf, 0, size celload "MEM:.png", wid(idLoad) return
 実行すると画像が3つ表示されます。
①、②いずれかのコメントを外すと問題が再現できます。
理想としては、③のコメントを外した場合と同様の挙動になってほしいところです。



この記事に返信する


zakki

リンク

2025/2/25(Tue) 18:34:04|NO.103124

多分CZHTTP_MODE_READYの時だけ処理してるのがまずくて、現状はアプリを再起動以外になさそうです。

https://github.com/onitama/OpenHSP/blob/master/src/hsp3dish/win32/webtask_win.cpp#L105
https://github.com/onitama/OpenHSP/blob/master/src/hsp3dish/emscripten/webtask_emscripten.cpp#L49
https://github.com/onitama/OpenHSP/blob/master/src/hsp3dish/linux/webtask_linux.cpp#L95

とりあえずはCZHTTP_MODE_READYかCZHTTP_MODE_ERRORの時に続行するようにすれば、多分動くようになるんじゃないかと思います。
Windows版はLANケーブル抜いてアプリ起動して、エラー起きたらLANケーブル刺しても復帰しないとかは残るかも。



窓月らら

リンク

2025/2/25(Tue) 18:37:49|NO.103125

この問題は把握していたものの、そういうもんだと思ってました。
おにたまさんに報告案件ですかね? 直せる問題であれば、よろしくお願いいたします。



GENKI

リンク

2025/2/25(Tue) 19:36:58|NO.103126

>> zakkiさん
回答ありがとうございます。
アプリ再起動以外ないとなるとバグとして報告が必要ですね。
後で書いて来よう。

ちなみにこの問題は、実行環境によって挙動が異なります。
 ① Windows:NG / ブラウザ:OK
 ② Windows:NG / ブラウザ:OK
 ③ Windows:OK / ブラウザ:NG
NG…3つ目の画像が表示されない。
OK…3つ目の画像が表示される。

>> 窓月ららさん
あるあるですね。一度そういうもんだと思ってしまうと報告の必要性を感じなくなってしまいます。



zakki

リンク

2025/2/25(Tue) 22:51:16|NO.103130




GENKI

リンク

2025/2/26(Wed) 21:21:41|NO.103135

>> zakkiさん
修正ありがとうございます。

とりあえずこのスレは解決とします。



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.103117への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>~</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2025(c) All rights reserved.