diff --git a/server_websocket.rb b/server_websocket.rb index bce8828..9c132af 100644 --- a/server_websocket.rb +++ b/server_websocket.rb @@ -1,43 +1,46 @@ #!/usr/bin/env ruby - - require 'em-websocket' #websoketライブラリ - require 'pp' #人間が読みやすいように表示してくれる - require 'json' #json形式にしたり、直したりする - - PORT = 8293 #portを指定 - - puts "参加者が入ったら表示するよ" - - EM::WebSocket.start({ #EventMachienを使用してWebsocket server を起動 (簡単に言えば非同期処理できる) - :host => '0.0.0.0', #すべてのネットワーク・インターフェースを表す、別ホストからでもアクセスできる - :port => PORT - }) do |em_ws| - join_member[em_ws] = true - puts join_member.length - - em_ws.onopen do #onopen:クライエントが接続したときに呼び出されるイベント - em_ws.send "Ruby:接続されたよ!" #接続したクライエントにメッセージを送る - printf("Ruby:clientが接続されました\n") #あとで誰が接続されたかデータ来るところにするーー - end - - em_ws.onmessage do |msg| #onmassage:クライエントからメッセージを受信したときに呼び出されるイベント - # jsonデータかの判別 - begin # 例外が発生する可能性のあるコードブロックの開始、このブロックでエラーがあれがrescue節に移る - rescue => error # beginブロック内で例外が発生した場合に実行される、エラーはerrorという変数に格納 - puts error.message - puts msg - end - em_ws.send "Ruby:サーバにメッセージ届きました!" #メッセージが来たことをクライエントに知らせる - end - - em_ws.onclose do #クライエントが接続を閉じたときに呼び出されるイベント - puts "Ruby:clientが接続を閉じました" #あとで誰抜けたかデータ持ってくるーー - join_member.delete(em_ws) - puts join_member.length - end - - em_ws.onerror do |error| #エラーが発生したときに呼び出されるイベント - puts "Ruby:Error: #{error.message}" - end - + +require 'em-websocket' # websoketライブラリ +require 'pp' # 人間が読みやすいように表示してくれる +require 'json' # json形式にしたり、直したりする + +PORT = 8293 # portを指定 +join_member = {} # 参加者を管理するハッシュを初期化 + +puts "参加者が入ったら表示するよ" + +EM::WebSocket.start({ # EventMachineを使用してWebSocket server を起動 + host: '0.0.0.0', # すべてのネットワーク・インターフェースを表す + port: PORT +}) do |em_ws| + join_member[em_ws] = true + puts "現在の参加者数: #{join_member.length}" + + em_ws.onopen do # クライエントが接続したときのイベント + em_ws.send "Ruby:接続されたよ!" # 接続したクライエントにメッセージを送る + puts "Ruby:clientが接続されました" end + + em_ws.onmessage do |msg| # クライエントからメッセージを受信したときのイベント + begin + # ここでjsonデータかの判別を行う(例) + json_data = JSON.parse(msg) # 例としてJSON形式に変換 + puts "受信したメッセージ: #{json_data}" + rescue JSON::ParserError => error # JSONのパースに失敗した場合 + puts "JSONパースエラー: #{error.message}" + puts "受信したメッセージ: #{msg}" + end + + em_ws.send "Ruby:サーバにメッセージ届きました!" # メッセージが来たことをクライエントに知らせる + end + + em_ws.onclose do # クライエントが接続を閉じたときのイベント + puts "Ruby:clientが接続を閉じました" + join_member.delete(em_ws) + puts "現在の参加者数: #{join_member.length}" + end + + em_ws.onerror do |error| # エラーが発生したときのイベント + puts "Ruby:Error: #{error.message}" + end +end