#!/usr/bin/env ruby
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