From 3b13a61123becc63823ab0c0941aaff2048b020e Mon Sep 17 00:00:00 2001 From: nsfisis Date: Thu, 8 Aug 2024 21:17:06 +0900 Subject: feat(backend/worker): calculate code hash in api-server --- backend/game/hub.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'backend/game/hub.go') diff --git a/backend/game/hub.go b/backend/game/hub.go index ac71152..aa1b9f2 100644 --- a/backend/game/hub.go +++ b/backend/game/hub.go @@ -2,7 +2,9 @@ package game import ( "context" + "crypto/md5" "errors" + "fmt" "log" "strings" "time" @@ -163,11 +165,13 @@ func (hub *gameHub) run() { log.Printf("submit: %v", message.message) code := msg.Data.Code codeSize := len(code) // TODO: exclude whitespaces. + codeHash := calcHash(code) if err := hub.taskQueue.EnqueueTaskCreateSubmissionRecord( hub.game.gameID, message.client.playerID, code, codeSize, + taskqueue.MD5HexHash(codeHash), ); err != nil { // TODO: notify failure to player log.Fatalf("failed to enqueue task: %v", err) @@ -329,7 +333,8 @@ func (hub *gameHub) processTaskResultCreateSubmissionRecord( if err := hub.taskQueue.EnqueueTaskCompileSwiftToWasm( taskResult.TaskPayload.GameID(), taskResult.TaskPayload.UserID(), - taskResult.TaskPayload.Code(), + taskResult.TaskPayload.Code, + taskResult.TaskPayload.CodeHash(), taskResult.SubmissionID, ); err != nil { return &codeSubmissionError{ @@ -371,7 +376,7 @@ func (hub *gameHub) processTaskResultCompileSwiftToWasm( if err := hub.taskQueue.EnqueueTaskCompileWasmToNativeExecutable( taskResult.TaskPayload.GameID(), taskResult.TaskPayload.UserID(), - taskResult.TaskPayload.Code(), + taskResult.TaskPayload.CodeHash(), taskResult.TaskPayload.SubmissionID, ); err != nil { return &codeSubmissionError{ @@ -429,7 +434,7 @@ func (hub *gameHub) processTaskResultCompileWasmToNativeExecutable( if err := hub.taskQueue.EnqueueTaskRunTestcase( taskResult.TaskPayload.GameID(), taskResult.TaskPayload.UserID(), - taskResult.TaskPayload.Code(), + taskResult.TaskPayload.CodeHash(), taskResult.TaskPayload.SubmissionID, int(testcase.TestcaseID), testcase.Stdin, @@ -644,3 +649,7 @@ func isTestcaseResultCorrect(expectedStdout, actualStdout string) bool { actualStdout = strings.TrimSpace(actualStdout) return actualStdout == expectedStdout } + +func calcHash(code string) string { + return fmt.Sprintf("%x", md5.Sum([]byte(code))) +} -- cgit v1.2.3-70-g09d2