jam-cloud/lib/jam_ruby/message_factory.rb

94 lines
3.9 KiB
Ruby

module JamRuby
# creates messages (implementation: protocol buffer) objects cleanly
class MessageFactory
CLIENT_TARGET = "client"
SERVER_TARGET = "server"
SESSION_TARGET_PREFIX = "session:"
USER_TARGET_PREFIX = "user:"
def initialize()
end
# create a login message using user/pass
def login_with_user_pass(username, password)
login = Jampb::Login.new(:username => username, :password => password)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN, :target => SERVER_TARGET, :login => login)
end
# create a login message using token (a cookie or similiar)
def login_with_token(token)
login = Jampb::Login.new(:token => token)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN, :target => SERVER_TARGET, :login => login)
end
# create a login ack (login was successful)
def login_ack(public_ip)
login_ack = Jampb::LoginAck.new(:public_ip => public_ip)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_ACK, :target => CLIENT_TARGET, :login_ack => login_ack)
end
# create a jam session login message
def login_jam_session(jam_session)
login_jam_session = Jampb::LoginJamSession.new(:jam_session => jam_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION, :target => SESSION_TARGET_PREFIX + jam_session, :login_jam_session => login_jam_session)
end
# create a jam session login message ack (success or on failure)
def login_jam_session_ack(error, error_reason)
login_jam_session_ack = Jampb::LoginJamSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION_ACK, :target => CLIENT_TARGET, :login_jam_session_ack => login_jam_session_ack)
end
# create a jam session 'leave session' message
def leave_jam_session(jam_session)
leave_jam_session = Jampb::LeaveJamSession.new(:jam_session => jam_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION, :target => SERVER_TARGET, :leave_jam_session => leave_jam_session)
end
# create a jam session leave message ack (success or on failure)
def leave_jam_session_ack(error, error_reason)
leave_jam_session_ack = Jampb::LeaveJamSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION_ACK, :target => CLIENT_TARGET, :leave_jam_session_ack => leave_jam_session_ack)
end
# create a server error
def server_generic_error(error_msg)
error = Jampb::ServerGenericError.new(:error_msg => error_msg)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::SERVER_GENERIC_ERROR, :target => CLIENT_TARGET, :server_generic_error => error)
end
# create a user-joined session message
def user_joined_jam_session(user_id, username)
error = Jampb::UserJoinedJamSession.new(:user_id => user_id, :username => username)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_JOINED_JAM_SESSION, :target => CLIENT_TARGET, :server_generic_error => error)
end
# is this message directed to the server?
def server_directed? msg
return msg.target == MessageFactory::SERVER_TARGET
end
# is this message directed to the client?
def client_directed? msg
return msg.target == MessageFactory::CLIENT_TARGET
end
# is this message directed to a (jam) session?
def session_directed? msg
return msg.target.start_with? MessageFactory::SESSION_TARGET_PREFIX
end
# is this message directed to a user?
def user_directed? msg
return msg.target.start_with? MessageFactory::USER_PREFIX_TARGET
end
def extract_session(msg)
return msg.target[MessageFactory::SESSION_TARGET_PREFIX..-1]
end
end
end