diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index cf7e6ee9..cdc3d682 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -1,10 +1,10 @@ # encoding: utf-8 class MyshixunsController < ApplicationController layout 'base_myshixun' - skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh] - before_filter :require_login, :except => [:training_task_status, :close_webssh] + skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message] + before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message] before_filter :check_authentication, :except => [:training_task_status, :close_webssh, :mul_test_home, :mul_test_user, - :mul_test_myshixun, :mul_test_shixun, :mul_test_start] + :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message] before_filter :find_myshixun, :only => [:show, :myshixun_reset, :open_webssh, :sync_reset_time, :destroy, :search_file_list, :vnc] DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) @@ -435,6 +435,36 @@ class MyshixunsController < ApplicationController end + # 代码运行中的信息接口 + def code_runinng_message + begin + jsonTestDetails = JSON.parse(params[:jsonTestDetails]) + game_id = jsonTestDetails['buildID'] + message = jsonTestDetails['textMsg'] + logger.info("##################code_runinng_message:#{jsonTestDetails}") + logger.info("##################buildID: #{game_id}") + logger.info("##################textMsg: #{message}") + if game_id.present? && message.present? + game = Game.find game_id + msg = game.run_code_message + # 只有评测中的game才会创建和更新代码评测中的信息 + if game.status == 1 || game.status == 2 && game.retry_status == 1 + if msg.blank? + RunCodeMessage.create!(:game_id => game_id, :status => 1, :message => message) + else + msg.update_attributes(:status => (msg.status + 1), :message => message) + end + else + # 评测完成,初始化评测信息的状态 + msg.update_attributes(:status => 0, :message => nil) if msg.present? + end + render :json => {:data => "success"} + end + rescue Exception => e + render :json => {:data => "failed"} + end + end + # taskId 即返回的game id # 返回结果:params [:stauts] 0 表示成功,其它则失败 # msg 错误信息 diff --git a/app/models/game.rb b/app/models/game.rb index 9f92d109..47674541 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -13,6 +13,7 @@ class Game < ActiveRecord::Base has_many :challenge_samples has_many :game_codes, :dependent => :destroy has_many :evaluate_records, :dependent => :destroy + has_one :run_code_message, :dependent => :destroy include ApplicationHelper scope :min, lambda { select([:id, :status, :myshixun_id, :user_id, :final_score, :challenge_id, :identifier, diff --git a/app/models/run_code_message.rb b/app/models/run_code_message.rb new file mode 100644 index 00000000..191ead34 --- /dev/null +++ b/app/models/run_code_message.rb @@ -0,0 +1,5 @@ +class RunCodeMessage < ActiveRecord::Base + # attr_accessible :title, :body + belongs_to :game + +end diff --git a/config/routes.rb b/config/routes.rb index 79c46a54..2b8b4b60 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -464,6 +464,7 @@ RedmineApp::Application.routes.draw do ## oauth相关 get 'sigle_mul_test' get 'sigle_update_myshixun' match 'training_task_status', :via => [:get, :post] + match 'code_runinng_message', :via => [:get, :post] end resources :games, :path => "stages" do member do diff --git a/db/migrate/20190315093727_create_run_code_messages.rb b/db/migrate/20190315093727_create_run_code_messages.rb new file mode 100644 index 00000000..bbd91acd --- /dev/null +++ b/db/migrate/20190315093727_create_run_code_messages.rb @@ -0,0 +1,11 @@ +class CreateRunCodeMessages < ActiveRecord::Migration + def change + create_table :run_code_messages do |t| + t.integer :status + t.string :message + t.references :game + t.timestamps + end + end +end +mo \ No newline at end of file diff --git a/spec/factories/run_code_messages.rb b/spec/factories/run_code_messages.rb new file mode 100644 index 00000000..b52afbc3 --- /dev/null +++ b/spec/factories/run_code_messages.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :run_code_message do + + end +end diff --git a/spec/models/run_code_message_spec.rb b/spec/models/run_code_message_spec.rb new file mode 100644 index 00000000..6e5cb831 --- /dev/null +++ b/spec/models/run_code_message_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe RunCodeMessage, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end