You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
1.1 KiB
Go

//////////////////////////////////////////////////////////////////////
//
// DO NOT EDIT THIS PART
// Your task is to edit `main.go`
//
package main
import (
"fmt"
"sync"
"time"
)
var wg sync.WaitGroup
// RunMockServer pretends to be a video processing service. It
// simulates user interacting with the Server.
func RunMockServer() {
u1 := User{ID: 0, IsPremium: false}
u2 := User{ID: 1, IsPremium: true}
wg.Add(5)
go createMockRequest(1, shortProcess, &u1)
time.Sleep(1 * time.Second)
go createMockRequest(2, longProcess, &u2)
time.Sleep(2 * time.Second)
go createMockRequest(3, shortProcess, &u1)
time.Sleep(1 * time.Second)
go createMockRequest(4, longProcess, &u1)
go createMockRequest(5, shortProcess, &u2)
wg.Wait()
}
func createMockRequest(pid int, fn func(), u *User) {
fmt.Println("UserID:", u.ID, "\tProcess", pid, "started.")
res := HandleRequest(fn, u)
if res {
fmt.Println("UserID:", u.ID, "\tProcess", pid, "done.")
} else {
fmt.Println("UserID:", u.ID, "\tProcess", pid, "killed. (No quota left)")
}
wg.Done()
}
func shortProcess() {
time.Sleep(6 * time.Second)
}
func longProcess() {
time.Sleep(11 * time.Second)
}