Skip to content

Instantly share code, notes, and snippets.

@r3bo0t

r3bo0t/test.cr Secret

Created October 26, 2017 19:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save r3bo0t/4564f8f5bcb88617a974c9b29fa9c6e5 to your computer and use it in GitHub Desktop.
Save r3bo0t/4564f8f5bcb88617a974c9b29fa9c6e5 to your computer and use it in GitHub Desktop.
Test Gist
module SmartTools
class ChatController
SOCKETS = {} of String => HTTP::WebSocket
def self.connect(socket, env)
SOCKETS.merge!({env.params.url["user"] => socket})
puts "connect"
socket.on_message do |message|
msg = JSON.parse message rescue nil
if msg
if msg["target_user_ids"]
json_message = {"message" => msg["message"].as_s, "user_id" => msg["user_id"].as_i, "ts" => Time.now.to_s.split(" ")[0]}
user = Repo.scalar "select fname from user where id = #{json_message["user_id"]} limit 1" rescue "Anonymous"
msg["target_user_ids"].each do |uid|
if SOCKETS.has_key?(uid.to_s)
SOCKETS[uid.to_s].send(json_message.to_json)
else
token = Repo.scalar "select fcm_token from user_app_details where user_id=#{uid}" rescue nil
SmartTools::FCM.send(token.to_s, "#{user} sent you a messages", json_message["message"].to_s, "http://sworks.co.in/CHAT/#{json_message["user_id"]}") if !token.to_s.blank?
end
insert_message(json_message["message"], json_message["user_id"], uid)
end
socket.send(json_message.to_json)
end
end
puts "on message"
end
socket.on_close do
puts "closing..."
SOCKETS.delete(SOCKETS.key?(socket))
end
end
private def self.insert_message(message, from, to)
Repo.exec "insert into chat_messages values (?, ?, ?, ?)", [from.to_s, to.as_i, message.to_s, Time.now]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment