func (srv *VehicleService) Get(p RouteArgs) {
	user_id, err := strconv.ParseInt(p.Vars["user"], 10, 64)
	if err != nil {
		fmt.Fprintf(p.Writer, "no player id")
		return
	}
	player := srv.World.Players[core.PlayerId(user_id)]

	vehicle_id, err := strconv.ParseInt(p.Vars["vehicle"], 10, 64)
	if err != nil {
		fmt.Fprintf(p.Writer, "no vehicle id")
		return
	}
	exists, vehicle := core.World.Vehicles.Find(core.VehicleId(vehicle_id))
	if exists {
		response := NewVehicleResponse(vehicle, player)

		p.Writer.Header().Set("Content-Type", "application/json")
		js, _ := json.Marshal(response)
		p.Writer.Write(js)
	} else {
		fmt.Fprintf(p.Writer, "Vehicle %d not found", vehicle_id)
	}
}
Example #2
0
func Run() {
	reader := bufio.NewReader(os.Stdin)
	world := core.World
	for {
		fmt.Print("> ")

		text, _ := reader.ReadString('\n')
		line := strings.ToLower(strings.Trim(strings.Trim(text, "\n"), " "))
		tokens := strings.Split(line, " ")

		switch tokens[0] {
		case "help":
			fmt.Println("Helpful Help Menu:")
			fmt.Println("  time")
			fmt.Println("  timescale <int scale>")
			fmt.Println("  vehicles")
			fmt.Println("  order <int VehicleId> <order> [; <order>]...")
			fmt.Println("  stop <int VehicleId>")
			fmt.Println("  quit")
		case "quit":
			os.Exit(0)
		case "time":
			fmt.Println("Server time:", core.Time())
		case "stop":
			if len(tokens) < 2 {
				fmt.Println("usage: stop <int VehicleId>")
				continue
			}
			for i := 1; i < len(tokens); i++ {
				id, err := strconv.ParseInt(tokens[i], 10, 64)
				if err != nil {
					fmt.Println("Invalid number: %s", tokens[i])
					continue
				}
				if ok, v := world.Vehicles.Find(core.VehicleId(id)); ok {
					v.Stop()
					fmt.Println("Stopping", v.Name)
				} else {
					fmt.Println("Unknown vehicle", id)
				}
			}

		case "order":
			if len(tokens) < 3 {
				fmt.Println("usage: order <int VehicleId> <order> [; <order>]...")
				continue
			}
			id, err := strconv.ParseInt(tokens[1], 10, 64)
			if err != nil {
				fmt.Println("Invalid number: %s", tokens[1])
				continue
			}
			if ok, v := world.Vehicles.Find(core.VehicleId(id)); ok {
				/* Compile order */
				order := compiler.Compile(strings.Join(tokens[2:], " "))
				order.SetVehicle(v)

				fmt.Println("Ordering", v.Name, "to:")
				order.Print()

				order.Execute(v.Actor)
			} else {
				fmt.Println("Unknown vehicle #%d", id)
			}

		case "vehicles":
			fmt.Println("All vehicles")
			for _, v := range world.Vehicles.Vehicles {
				fmt.Println(" ", v)
			}

		case "timescale":
			if len(tokens) < 2 {
				fmt.Println("usage: timescale <int scale>")
				continue
			}
			if tokens[1] == "reset" {
				fmt.Println("Timescale: 1hr per second")
				core.TIMESCALE = time.Duration(3600)
				continue
			}
			scale, err := strconv.ParseInt(tokens[1], 10, 64)
			if err != nil {
				fmt.Println("Invalid number")
				continue
			}
			core.TIMESCALE = time.Duration(scale)
			t := core.TIMESCALE * time.Second
			fmt.Println("Server timescale:", t, "per second")

		default:
			fmt.Printf("Invalid command '%s'. Type 'help' to show a helpful help menu\n", tokens[0])
		}
	}
}