#!/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