Code Monkey home page Code Monkey logo

dodontof's People

Contributors

blhsrwznrghfzpr avatar cocodahlia avatar erina-alx avatar faviusty avatar h-mikisato avatar nkudryavka avatar ochaochaocha3 avatar raa0121 avatar riena avatar torgtaitai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dodontof's Issues

リリースファイルでGemfileが消えている

リポジトリとリリースファイルを比較していて気づいたのですが、リリースファイルではGemfileが意図的に削除されているのでしょうか? もしそうでしたら、Gemfileの削除処理は行わないでいただきたいです。

Gemfileが存在すれば、Rubyの新しいバージョン移行に伴いライブラリを入れ直さなければならないとき(例:TRPG.NETサーバでは、2.3.1→2.4.1のときにこのようになりました)でも、必要なライブラリのインストールを bundle install というコマンドによって自動で行うことができます。msgpackだけとはいえ、何のライブラリが必要か考えずに実行できるのが非常に便利です。

Webインターフェースのコマンド解析の不具合?

Webインターフェースを呼び出したとき、parseWebIfMessageData() に進んでいないようです。意図的かどうかはっきりしませんでしたが、一応報告いたします。

コマンド解析までの順番

「printResult() 以下」の階層が深くなっているので、ここを単純化できると見通しがよくなりそうに見えます。

トップレベル

  1. executeDodontoServerCgi()
    1. getCgiParams()
      • ここで DodontoFServer::getMessagePackFromData() に進まない
    2. main()
      1. printResult()

printResult() 以下

  1. DodontoFServer#getResponse()
    1. DodontoFServer#analyzeCommand()
      1. DodontoFServer#getRequestData('cmd')
        • nil が返る
      2. DodontoFServer#getResponseTextWhenNoCommandName()
        1. DodontoFServer#analyzeWebInterface()
          1. DodontoFServer#analyzeWebInterfaceCatched()

DodontoFServer#analyzeWebInterfaceCatched() 以下

  1. DodontoFServer#getRequestData('webif')
  2. DodontoFServer#analyzeWebInterfaceNoLogin()
  3. DodontoFServer#loginOnWebInterface()
  4. DodontoFServer#analyzeWebInterfaceLogined()
    1. DodontoFServer#analyzeWebInterfaceLoginedEveryone()
    2. DodontoFServer#analyzeWebInterfaceParticipant()

原因?

getCgiParams() において、HTTPのGETメソッドの場合には、以下に到達し得る DodontoFServer::getMessagePackFromData() を通りません。

  • DodontoFServer::isWebIfMessagePack()
  • DodontoFServer::parseWebIfMessageData()

参考:

DodontoF/DodontoFServer.rb

Lines 6939 to 6946 in 94c3c04

if( ENV['REQUEST_METHOD'] == "POST" )
length = ENV['CONTENT_LENGTH'].to_i
logging(length, "getCgiParams length")
input = $stdin.read(length)
logging(input, "getCgiParams input")
messagePackedData = DodontoFServer.getMessagePackFromData( input )
end

ログ

webifのgetBusyInfoを呼び出したときのログです。

D, [2016-04-17T21:48:00.022753 #7960] DEBUG -- : :getCgiParams Begin
D, [2016-04-17T21:48:00.022854 #7960] DEBUG -- : ENV[REQUEST_METHOD]:GET
D, [2016-04-17T21:48:00.022930 #7960] DEBUG -- : messagePackedData:{}
D, [2016-04-17T21:48:00.022961 #7960] DEBUG -- : :getCgiParams End
D, [2016-04-17T21:48:00.022989 #7960] DEBUG -- : :main called
D, [2016-04-17T21:48:00.023022 #7960] DEBUG -- : getRequestData key:room
D, [2016-04-17T21:48:00.023058 #7960] DEBUG -- : saveDataKeyName:chatMessageDataLog
D, [2016-04-17T21:48:00.023085 #7960] DEBUG -- : saveFileName:chat.json
D, [2016-04-17T21:48:00.023111 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.023138 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.023169 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.023199 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023230 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023285 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.023317 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.023347 #7960] DEBUG -- : saveDataKeyName:map
D, [2016-04-17T21:48:00.023373 #7960] DEBUG -- : saveFileName:map.json
D, [2016-04-17T21:48:00.023397 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.023421 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.023452 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.023479 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023508 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023538 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.023563 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.023590 #7960] DEBUG -- : saveDataKeyName:characters
D, [2016-04-17T21:48:00.023615 #7960] DEBUG -- : saveFileName:characters.json
D, [2016-04-17T21:48:00.023639 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.023663 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.023693 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.023720 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023749 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.023778 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.023804 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.023852 #7960] DEBUG -- : saveDataKeyName:time
D, [2016-04-17T21:48:00.023891 #7960] DEBUG -- : saveFileName:time.json
D, [2016-04-17T21:48:00.023918 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.023943 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.023973 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.024026 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024064 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024095 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.024120 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.024148 #7960] DEBUG -- : saveDataKeyName:effects
D, [2016-04-17T21:48:00.024173 #7960] DEBUG -- : saveFileName:effects.json
D, [2016-04-17T21:48:00.024197 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.024221 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.024251 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.024278 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024307 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024336 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.024361 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.024388 #7960] DEBUG -- : saveDataKeyName:playRoomInfo
D, [2016-04-17T21:48:00.024413 #7960] DEBUG -- : saveFileName:playRoomInfo.json
D, [2016-04-17T21:48:00.024436 #7960] DEBUG -- : :getDirName begin..
D, [2016-04-17T21:48:00.024482 #7960] DEBUG -- : requestData:nil
D, [2016-04-17T21:48:00.024517 #7960] DEBUG -- : saveDataDirIndexObject:nil
D, [2016-04-17T21:48:00.024544 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024573 #7960] DEBUG -- : saveDataDirIndex:0
D, [2016-04-17T21:48:00.024602 #7960] DEBUG -- : saveDataDirName created:../../saveData/data_0
D, [2016-04-17T21:48:00.024627 #7960] DEBUG -- : saveDataDirName:../../saveData/data_0
D, [2016-04-17T21:48:00.024659 #7960] DEBUG -- : :server created
D, [2016-04-17T21:48:00.024687 #7960] DEBUG -- : :========================================>CGI begin.
D, [2016-04-17T21:48:00.024716 #7960] DEBUG -- : getRequestData key:cmd
D, [2016-04-17T21:48:00.024746 #7960] DEBUG -- : commandName:nil
D, [2016-04-17T21:48:00.024774 #7960] DEBUG -- : :getResponseTextWhenNoCommandName Begin
D, [2016-04-17T21:48:00.024800 #7960] DEBUG -- : :analyzeWebInterfaceCatched begin
D, [2016-04-17T21:48:00.024825 #7960] DEBUG -- : getRequestData key:webif
D, [2016-04-17T21:48:00.024948 #7960] DEBUG -- : commandName:getBusyInfo
D, [2016-04-17T21:48:00.024982 #7960] DEBUG -- : getRequestData key:marker
D, [2016-04-17T21:48:00.025009 #7960] DEBUG -- : commandName:getBusyInfo
D, [2016-04-17T21:48:00.025092 #7960] DEBUG -- : getRequestData key:callback
D, [2016-04-17T21:48:00.025127 #7960] DEBUG -- : :callBack
D, [2016-04-17T21:48:00.025184 #7960] DEBUG -- : {"loginCount"=>0, "maxLoginCount"=>30, "version"=>"Ver.1.47.24(2016/04/07)", "result"=>"OK"}:analyzeWebInterfaceCatched end result
D, [2016-04-17T21:48:00.025273 #7960] DEBUG -- : CGI response original length:85
D, [2016-04-17T21:48:00.025305 #7960] DEBUG -- : RESPONSE header:Content-Type: text/plain; charset=utf-8

D, [2016-04-17T21:48:00.025338 #7960] DEBUG -- : :========================================>CGI end.
D, [2016-04-17T21:48:00.025363 #7960] DEBUG -- : :printResult called

リリースファイルの生成手順について

#76 と関連することです。どどんとふのリポジトリとリリースファイルのディレクトリ構成は異なっていますが、リリースファイルの生成手順は公開できませんでしょうか?

必要性を感じた理由は以下のとおりです。

  • リリースファイルの生成手順が明らかになっていると新しい(まっさらな)環境を作りやすい。
    • ダイスボット追加等の作業で一時的に含まれている可能性がある余分なファイルがなくなるため、現在リリースされているバージョンとの挙動の差を正しく調べやすくなると考えられます。
  • BCDiceのバージョンの同期を行いやすくなる。
    • 現在、Onset!等と同様にBCDiceをサブモジュール化する作業を行っており、これが完了すればダイスボットの更新のマージが楽になります。また、そのマージのコマンドをリリースファイルの生成手順に入れ、自動化すれば更新ミスが非常に起こりにくくなります。

もし生成スクリプトのようなものがございましたら、同様の手順を rake package のようなコマンドで実行できるようにRakefileに移植できないかと考えています。ご検討よろしくお願いいたします。

[Question] DodontoF.swf のgithub提供が無くなった理由と対応について

先ほど git --rebase したところ DodontoF.swf が削除されサービスが提供できなくなりました。
調べたところ f9ecb75 で削除されたようですが、パッケージとの差分は意図的なものでしょうか。
というのもパッケージ版を確認したところ
index.htmlで指定されているembedタグのsrc属性はそのままで、
DodontoF.swfが同梱されていました。

もしかして今後は、tagに対応したパッケージの方から
DodontoF.swfだけを取り込むという運用か。
あるいは、各々コンパイルする方式で行うということでしょうか。

messagepackによるPOST送信時のContent-Typeについて

ご無沙汰しています。
どどんとふの実装について、久方ぶりで恐縮ですが、対応願いたい事がありましたので記載いたします。
(公式サイトのBBSの方に記載するのが本筋かとも思いましたが、あちらは上手く投稿ができませんでした)

内容としては件名にある通りなのですが、dodontof.swf内からPOSTデータを送信の際にContent-Typeを現状のapplication/x-www-form-urlencodedではなく、application/x-msgpackが設定されるようにしていただきたいです。

ここの値が問題となる事は公式で推奨されている範囲ではほとんど無いとは思うのですが、一応以下のような観点から可能な限りx-www-form-urlencodedでない値に変更した方が好ましいと考えています。

  • application/x-www-form-urlencodedはデファクトな規格が存在し、一部のアプリケーションサーバやミドルウェアの機能でContent-Typeにこの値が指定されている場合にその規格を前提とした処理を暗黙裡に行う場合がある
  • 規格の上ではテキストデータである事を前提としているので、バイナリデータを送信するmessage-packのコンテンツを解釈する際に予期せぬエラーを起こしやすい

対応としてはsrc_actionScript/配下のSaredDataSender#getUrlRequestForSendCommandDataメソッド辺りでcontentTypeを指定するのが最も簡易なやり方になると思います。

本来であればPullReq経由で修正箇所を送るべきではあるのですが、私の方の環境の問題か最新版のdodontof.swfのビルドが正常に完了できていないため十分な検証が行えていませんので一旦Issueのみ送らせていただきました。

以上です。
ご検討いただければ幸いです。

sorry for the stupid require

Because the copyright, please remove the chinese coc/coc 7th extratables (short /longer) that i upload.
it is my fault.
thank you for your help.

設定のスペルミス

先日config.rbに追加された部屋名チェッカーの設定にスペルミスがありました。

$wordChecker = {
  "changePlayRoomNameChaker" => { # Chaker ではなく Checker?
  }
}

まだ利用者が少ないと思われますので、これは直せるのではないでしょうか?

ディレクトリ構造が変わるとすべての画像が壊れてしまいます

imageInfo.json にハードコーディングされている画像までのパスは使えなくなり、新しいディレクトリまでのパスを config.rb (config_local.rb) に変数 $imageUploadDir として記述しても、{$imageUploadDir}/(room_[NUMBER])/imageInfo.json のファイル内容は変更されないため、すべての画像が読み込み不能になります。
ファイルのアップロード時は相対パスでjsonに記述し、読み込み時に変数展開して画像までのパスを作ることはできないでしょうか?

extratables problem

Hi, I am dodontof chinese user,
I just update to Ver.1.49.04.01(2019/04/30リリース).
But there is a problem.
The japanese extratables is work fine.
But ChineseTraditional wont work.

example:
I try to put Cthulhu7th_ChineseTraditional_Realtime and Cthulhu7th_Realtime to folder extratables2 and extratables.
In japanese mode, it is work.
but ChineseTraditional wont.

ruby-1.8.6ではsrc_bcdice/TableFileData.rbのgetTableDataFromFile()が動かない

これは作業中に気づいたんですが直してなかったのでissueの起票だけ。

問題概要

TableFileData::getTableDataFromFile() は内部的に
&:symbol 形式の Proc オブジェクト生成を行って、これを使って処理を書いている部分があります。
しかし1.8系にこの機能は有りません。

修正案

1. 1.8.6のサポートを打ち切る

オススメです。
ruby的に1.8系列は2014年7月31日に(Herokuの助力で6か月終了を伸ばしたうえで)サポート終了しており
(それどころか実は2.0.0もサポートは終了してしまっており... https://www.ruby-lang.org/ja/news/2016/02/24/support-plan-of-ruby-2-0-0-and-2-1/)
その後いくつものセキュリティパッチがあったんですが、1.8系には取り込まれていないので単純に使うと危険なので……。
(DodontoFServerを動かすとこにどれくらいのセキュリティが求められるかというのはもちろんありますが。
またDodontoF自体がエラーを生んでるというよりもruby1.8を入れてるサーバの脆弱性ではあるので。)

2. 以下のpatchを当てる

単純に技術的には以下で解決します。

diff --git a/src_bcdice/TableFileData.rb b/src_bcdice/TableFileData.rb
index 6f4d2b5..5cf866d 100644
--- a/src_bcdice/TableFileData.rb
+++ b/src_bcdice/TableFileData.rb
@@ -131,7 +131,8 @@ class TableFileData

   def getTableDataFromFile(fileName)
     table = []
-    lines = File.read(fileName).toutf8.lines.map(&:chomp)
+    lines = File.read(fileName).toutf8.lines.map { |s| s.chomp }

     defineLine = lines.shift
     dice, title = getDiceAndTitle(defineLine)

ログインパスワードのチェックがされていない。

部屋内で行えるほとんどのコマンドについて、パスワードなしに実行が可能になっています。
実行可能コマンドにchangePlayRoomを含むため、パスワードを変更してしまえば全てのコマンドが実行可能になります。

msgpackの利用設定がされていない場合、POSTデータでも一部の実行が可能なためより深刻だと思われます。

バージョンごとのタグ付けの提案

最近のリファクタリングでコミット数が増えたため、リリース時のコミットが埋もれがちになってきました。そこで、GitHubの他のリポジトリと同様、リリース時にコミットへのタグを付けてみてはいかがでしょうか?

例えば、以下のようなコマンドで行うことができます。

# リリース分のコミットが終わったときに
git tag v1.48.00

# コミットを指定することも可能
git tag v1.47.24 94c3c04

# GitHub にタグをアップロードする
git push --tags origin master

また、GitHubではリリース(≒タグ、リポジトリトップの上部の「Releases」)ごとにソースコードと別にバイナリファイルをアップロードすることができます。これを利用すると、リポジトリ中に重い .swf ファイルを含めず、アップロードするバイナリファイル(例えばどどんとふ公式で配布している .zip のアーカイブ)にのみ含めることができます。このようにしてリポジトリの軽量化を行うのはいかがでしょうか?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.