堕天使の煉獄
2018-10
23
03:28:21
車輪~
今日もにこにこPG。
今日は放置ゲーの機能の一つ、オフライン進行のための時間取得まわり。
このへん、オンライン前提のゲームだとよいのですが、オフゲの場合、PCの時間を変更することで簡単にチートできてしまうんですよね。なんにも考えないで作った場合。
時計を一ヶ月ぐらい進める→ゲーム内で一ヶ月放置した状態に→ウマー。
って感じで。
んで、とりあえず思いつく対策としては、ユーザーが変更することが出来ない外部から時間を取得してくる、という方法がある。
で、NTPサーバという時間取得用の鯖から時間を引っ張ってこようというわけですよ。
OSの時間なんかもNTPから定期的に取得して微調整してたりしてます。
んで、外部にネットでアクセスってとwinsockか。
……なんかググっても古い記事ばっかり。1997年の記事とか2000年ちょい過ぎぐらいのばかり。
もう枯れてて、この時代のがそのまま今でも問題ないのだろうかね。
この辺、ファイヤウォールとか、割と最近のIPv6とかそのへんの絡みで古い情報だと無理~とかならないのかなーとちょと不安になりつつもいろいろ下調べ。
で、とりあえずNTPサーバにUDPでリクエストだして時間を受け取る~までは出来たのですが。
リクエスト待ちのとき、プロセスの制御もとまっちまう~。
別スレッドでやって、メッセージの処理とか別で~とか、winアプリ開発で一番うんざりする部分じゃないですかヤダー!
ちなQTだとその辺隠蔽されてるので、情報が英語しかない点のぞけば楽だったなぁ。
で、ふとそいやDXライブラリにも通信機能あったのでわ?
と思いだし、調べてみると……普通にUDPで送受信&別プロセスで実行待機まであるじゃん……。
受信待ちの間のプログレスバー表示とかも簡単にできそうぽ。
ああ、既にある物を作ろうとしてしまった車輪~。
で、DXライブラリの方の機能でNTPサーバから時間取ってくるのぺぺいと出来。
いままでの調べ物に費やした時間はドブに~。まあ下地になる知識仕入れてたからさくっとDXライブラリ使用版のほうも作れたって部分のもあるからそう無駄ってわけでもないか……。
ちょっと悩んだのが、NTPサーバに送るパケットと、受信したデータが、ネットワークバイトオーダーなんですよね。今時のPCのCPUではリトルエンディアンが採用されてるのですが、ネットワークバイトオーダーはいまのところビッグエンディアンで統一されている模様。
んでwinsockではhtonl ntohlといったバイトオーダー変更用のマクロ? があるのだけども。
DXライブラリでUDP通信やってるのだけども、当然内部ではwinsock使ってるんだろうけど、静的ライブラリで別プロジェクトだからなのかな。
htonl、ntohlがつかえない。
んでもこれらを使う為だけのために
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
をこっちのプロジェクト内にも設定しなくてはいけないのはうっとうしい。
とくにWinSock2.hはインクルードの順番とかで不具合出たりするらしいので、(windows.hより前にインクルードしないと不味いとか)そういう面倒はご免被りたい。
てかバイトオーダーを反転させてるだけなんですよねhtonlとntohlて。
直接バイトオーダー反転するの自前で書いたらいかんのか?
とおもったのだけども。
WinSockのhtonl、ntohlあたりの関数は、どうもCPUのバイトエンディアン調べていろいろごにょごにょとか、環境まわりの差異の面倒をやってくれる物らしい。
んー現行のリトルエンディアンなCPU上でしか動かすアテがない場合なら自前でバイトオーダー反転させちゃっても問題ない……よな。
そも他の環境ってならwinsock自体つかわんだろうし。
いいや。自前でWinSock2.hインクルードとかしたくないし。
見なかったことにしよう(ぉ
そんな感じでとりあえず出来。
あとは複数のNTPサーバ登録しておいて、上手く取得出来なかったら他の~とかそういった処理とかも必要になるかな。
それにテキストファイルからのNTPサーバ選択とか。本体exe弄らずに使用NTP鯖の変更とかは必要かと。
んでもまあデバッグ時には普通にシステム時間から持ってくるってのでいいので、運用上のデバッグとかは随分先の話になりそうだけど。
はふ~
とにかく回り道をしてしまった~。
今日は放置ゲーの機能の一つ、オフライン進行のための時間取得まわり。
このへん、オンライン前提のゲームだとよいのですが、オフゲの場合、PCの時間を変更することで簡単にチートできてしまうんですよね。なんにも考えないで作った場合。
時計を一ヶ月ぐらい進める→ゲーム内で一ヶ月放置した状態に→ウマー。
って感じで。
んで、とりあえず思いつく対策としては、ユーザーが変更することが出来ない外部から時間を取得してくる、という方法がある。
で、NTPサーバという時間取得用の鯖から時間を引っ張ってこようというわけですよ。
OSの時間なんかもNTPから定期的に取得して微調整してたりしてます。
んで、外部にネットでアクセスってとwinsockか。
……なんかググっても古い記事ばっかり。1997年の記事とか2000年ちょい過ぎぐらいのばかり。
もう枯れてて、この時代のがそのまま今でも問題ないのだろうかね。
この辺、ファイヤウォールとか、割と最近のIPv6とかそのへんの絡みで古い情報だと無理~とかならないのかなーとちょと不安になりつつもいろいろ下調べ。
で、とりあえずNTPサーバにUDPでリクエストだして時間を受け取る~までは出来たのですが。
リクエスト待ちのとき、プロセスの制御もとまっちまう~。
別スレッドでやって、メッセージの処理とか別で~とか、winアプリ開発で一番うんざりする部分じゃないですかヤダー!
ちなQTだとその辺隠蔽されてるので、情報が英語しかない点のぞけば楽だったなぁ。
で、ふとそいやDXライブラリにも通信機能あったのでわ?
と思いだし、調べてみると……普通にUDPで送受信&別プロセスで実行待機まであるじゃん……。
受信待ちの間のプログレスバー表示とかも簡単にできそうぽ。
ああ、既にある物を作ろうとしてしまった車輪~。
で、DXライブラリの方の機能でNTPサーバから時間取ってくるのぺぺいと出来。
いままでの調べ物に費やした時間はドブに~。まあ下地になる知識仕入れてたからさくっとDXライブラリ使用版のほうも作れたって部分のもあるからそう無駄ってわけでもないか……。
ちょっと悩んだのが、NTPサーバに送るパケットと、受信したデータが、ネットワークバイトオーダーなんですよね。今時のPCのCPUではリトルエンディアンが採用されてるのですが、ネットワークバイトオーダーはいまのところビッグエンディアンで統一されている模様。
んでwinsockではhtonl ntohlといったバイトオーダー変更用のマクロ? があるのだけども。
DXライブラリでUDP通信やってるのだけども、当然内部ではwinsock使ってるんだろうけど、静的ライブラリで別プロジェクトだからなのかな。
htonl、ntohlがつかえない。
んでもこれらを使う為だけのために
#include <WinSock2.h>
#pragma comment(lib, "ws2_32.lib")
をこっちのプロジェクト内にも設定しなくてはいけないのはうっとうしい。
とくにWinSock2.hはインクルードの順番とかで不具合出たりするらしいので、(windows.hより前にインクルードしないと不味いとか)そういう面倒はご免被りたい。
てかバイトオーダーを反転させてるだけなんですよねhtonlとntohlて。
直接バイトオーダー反転するの自前で書いたらいかんのか?
とおもったのだけども。
WinSockのhtonl、ntohlあたりの関数は、どうもCPUのバイトエンディアン調べていろいろごにょごにょとか、環境まわりの差異の面倒をやってくれる物らしい。
んー現行のリトルエンディアンなCPU上でしか動かすアテがない場合なら自前でバイトオーダー反転させちゃっても問題ない……よな。
そも他の環境ってならwinsock自体つかわんだろうし。
いいや。自前でWinSock2.hインクルードとかしたくないし。
見なかったことにしよう(ぉ
そんな感じでとりあえず出来。
あとは複数のNTPサーバ登録しておいて、上手く取得出来なかったら他の~とかそういった処理とかも必要になるかな。
それにテキストファイルからのNTPサーバ選択とか。本体exe弄らずに使用NTP鯖の変更とかは必要かと。
んでもまあデバッグ時には普通にシステム時間から持ってくるってのでいいので、運用上のデバッグとかは随分先の話になりそうだけど。
はふ~
とにかく回り道をしてしまった~。
Sun
Mon
Tue
Wed
Thu
Fri
Sat
01
02
03
■
■
台風よくくるな
04
■
■
遅々として
05
06
07
08
[体育の日]
09
10
11
12
13
14
15
■
■
c++の闇は深い
16
17
18
19
20
■
■
数式こわい
21
22
23
■
■
車輪~
24
25
26
27
28
29
30
31
total:2077058 t:66 y:504
■記事タイトル■
■年度別リスト■
2024年
2024年12月(0)2024年11月(0)
2024年10月(1)
2024年09月(2)
2024年08月(1)
2024年07月(1)
2024年06月(5)
2024年05月(2)
2024年04月(1)
2024年03月(6)
2024年02月(4)
2024年01月(3)
2023年
2023年12月(3)2023年11月(1)
2023年10月(2)
2023年09月(3)
2023年08月(3)
2023年07月(3)
2023年06月(7)
2023年05月(8)
2023年04月(2)
2023年03月(1)
2023年02月(2)
2023年01月(3)
2022年
2022年12月(4)2022年11月(3)
2022年10月(1)
2022年09月(3)
2022年08月(3)
2022年07月(2)
2022年06月(1)
2022年05月(3)
2022年04月(2)
2022年03月(2)
2022年02月(1)
2022年01月(6)
2021年
2021年12月(8)2021年11月(3)
2021年10月(4)
2021年09月(6)
2021年08月(2)
2021年07月(1)
2021年06月(3)
2021年05月(2)
2021年04月(2)
2021年03月(3)
2021年02月(1)
2021年01月(4)
2020年
2020年12月(3)2020年11月(7)
2020年10月(2)
2020年09月(3)
2020年08月(1)
2020年07月(3)
2020年06月(7)
2020年05月(5)
2020年04月(8)
2020年03月(4)
2020年02月(2)
2020年01月(4)
2019年
2019年12月(1)2019年11月(1)
2019年10月(2)
2019年09月(1)
2019年08月(3)
2019年07月(2)
2019年06月(2)
2019年05月(2)
2019年04月(4)
2019年03月(1)
2019年02月(7)
2019年01月(1)
2018年
2018年12月(1)2018年11月(1)
2018年10月(5)
2018年09月(1)
2018年08月(5)
2018年07月(1)
2018年06月(1)
2018年05月(1)
2018年04月(2)
2018年03月(2)
2018年02月(1)
2018年01月(1)
2017年
2017年12月(2)2017年11月(1)
2017年10月(2)
2017年09月(5)
2017年08月(8)
2017年07月(2)
2017年06月(1)
2017年05月(1)
2017年04月(3)
2017年03月(5)
2017年02月(7)
2017年01月(8)
2016年
2016年12月(7)2016年11月(2)
2016年10月(3)
2016年09月(7)
2016年08月(8)
2016年07月(10)
2016年06月(17)
2016年05月(6)
2016年04月(8)
2016年03月(10)
2016年02月(5)
2016年01月(10)
2015年
2015年12月(7)2015年11月(7)
2015年10月(13)
2015年09月(7)
2015年08月(7)
2015年07月(5)
2015年06月(4)
2015年05月(5)
2015年04月(2)
2015年03月(4)
2015年02月(1)
2015年01月(7)
2014年
2014年12月(12)2014年11月(8)
2014年10月(4)
2014年09月(6)
2014年08月(7)
2014年07月(4)
2014年06月(2)
2014年05月(5)
2014年04月(4)
2014年03月(8)
2014年02月(4)
2014年01月(8)
2013年
2013年12月(15)2013年11月(8)
2013年10月(3)
2013年09月(3)
2013年08月(8)
2013年07月(0)
2013年06月(0)
2013年05月(0)
2013年04月(0)
2013年03月(0)
2013年02月(0)
2013年01月(0)
■レス履歴■
■ファイル抽出■
■ワード検索■
堕天使の煉獄
https://rengoku.sakura.ne.jp
管理人
織田霧さくら(oda-x)
E-mail (■を@に)
oda-x■rengoku.sakura.ne.jp