Method for tutor to accept the request for video session.
# File app/controllers/video_sessions_controller.rb, line 40 def accept user = User.find(params[:user_id]) resource = params[:resource_type].constantize.find(params[:resource_id]) @tutoring_session = current_user.tutoring_sessions.build( user: user, resource: resource, start_time: Time.now, date: Date.today_in_time_zone, session_type: TutoringSession::TYPES.assoc('Video').last ) @tutoring_session.save! @video_session_room = @tutoring_session.find_or_create_video_session_room ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-accepted-user', video_session_url: video_session_path(@video_session_room)) ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-accepted-tutor', user_id: user.id, resource_id: params[:resource_id], resource_type: params[:resource_type]) respond_to do |format| format.js end end
It closes video session by student or by tutor.
# File app/controllers/video_sessions_controller.rb, line 99 def close @video_session_room.close! @tutoring_session = @video_session_room.tutoring_session @tutoring_session.build_review unless @tutoring_session.review client = ActsAsTenant.current_tenant.pusher_configuration.client if current_user == @tutoring_session.tutor client["private-user-#{@tutoring_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @tutoring_session.id, rating_url: rating_tutoring_session_path(@tutoring_session), message: "Video session has been closed by #{current_user.name}"}) else client["private-user-#{@tutoring_session.other_user(current_user).id}"].trigger_async('video_session_ended', {session_id: @tutoring_session.id, message: "Video session has been closed by #{current_user.name}"}) end respond_to do |format| format.js format.html {redirect_to dashboard_path, notice: 'Video Session has been closed successfully.'} end end
To initialize video session
# File app/controllers/video_sessions_controller.rb, line 6 def new @tutor = Tutor.find(params[:session][:tutor_id]) if current_user.has_balanced_account? if !@tutor.related_sessions.ongoing_sessions.exists? and !current_user.related_sessions.ongoing_sessions.exists? and @tutor.available_for_video? and @tutor.online? @available = true unless params[:session][:resource_id].blank? resource = params[:session][:resource_type].constantize.find(params[:session][:resource_id]) ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{@tutor.id}"].trigger_async( 'video-session-requested', user: { id: current_user.id, name: current_user.name, image: view_context.image_path(current_user.image_url(:medium))}, resource_name: resource.name, resource_type: params[:session][:resource_type], resource_id: params[:session][:resource_id], accept_url: accept_video_sessions_path(user_id: current_user.id, resource_type: params[:session][:resource_type], resource_id: params[:session][:resource_id]), reject_url: reject_video_sessions_path(user_id: current_user.id, resource_type: params[:session][:resource_type], resource_id: params[:session][:resource_id]) ) end end respond_to do |format| format.html {render layout: false} format.js {} end else @user = current_user @user.credit_cards.build unless @user.credit_cards.exists? @redirect_url = request.url render 'settings/payment_details', layout: false end end
Method for tutor to reject the request for video session.
# File app/controllers/video_sessions_controller.rb, line 60 def reject if params[:user_id] user = User.find(params[:user_id]) tutor = current_user else user = current_user tutor = Tutor.find(params[:tutor_id]) end data = {tutor_id: tutor.id, user_id: user.id, resource_id: params[:resource_id], resource_type: params[:resource_type], message: 'Your request for video session has been rejected by the tutor'} ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{user.id}"].trigger_async('video-session-request-rejected', data) ActsAsTenant.current_tenant.pusher_configuration.client["private-user-#{tutor.id}"].trigger_async('video-session-request-rejected', data) render nothing: true end
Shows the video session window.
# File app/controllers/video_sessions_controller.rb, line 75 def show unless @video_session_room.closed? @conversation = ChatConversation.find_or_create_conversation_for(current_user, [@video_session_room.tutoring_session.other_user(current_user).id]) end respond_to do |format| format.html {render layout: false} format.json {render json: @video_session_room.to_json(only: [], methods: [:canvas_data])} end end
To update video sessions.
# File app/controllers/video_sessions_controller.rb, line 86 def update canvas = @video_session_room.canvas || @video_session_room.build_canvas canvas.data = params[:canvas_json] if canvas.save client = ActsAsTenant.current_tenant.pusher_configuration.client client["private-user-#{@video_session_room.tutoring_session.other_user(current_user).id}"].trigger_async('video_session_canvas_data', {action: 'reload'}) render json: {status: 200} else render json: {status: 400, error: 'Unable to update canvas'} end end