Skip to main content

nil_client/client/
world.rs

1// Copyright (C) Call of Nil contributors
2// SPDX-License-Identifier: AGPL-3.0-only
3
4use super::Client;
5use crate::error::Result;
6use crate::http;
7use nil_core::npc::bot::BotId;
8use nil_core::npc::precursor::PrecursorId;
9use nil_core::player::PlayerId;
10use nil_core::world::config::{WorldConfig, WorldId};
11use nil_core::world::stats::WorldStats;
12use nil_payload::world::*;
13use nil_server_types::RemoteWorld;
14
15impl Client {
16  pub async fn create_remote_world(&self, req: CreateRemoteWorldRequest) -> Result<WorldId> {
17    http::json_post("create-remote-world")
18      .body(req)
19      .server(self.server)
20      .maybe_authorization(self.authorization.as_ref())
21      .circuit_breaker(self.circuit_breaker())
22      .user_agent(&self.user_agent)
23      .send()
24      .await
25  }
26
27  pub async fn get_remote_world(&self, req: GetRemoteWorldRequest) -> Result<RemoteWorld> {
28    http::json_put("get-remote-world")
29      .body(req)
30      .server(self.server)
31      .circuit_breaker(self.circuit_breaker())
32      .retry(&self.retry)
33      .user_agent(&self.user_agent)
34      .send()
35      .await
36  }
37
38  pub async fn get_remote_world_limit(&self) -> Result<u16> {
39    http::json_get("get-remote-world-limit")
40      .server(self.server)
41      .circuit_breaker(self.circuit_breaker())
42      .retry(&self.retry)
43      .user_agent(&self.user_agent)
44      .send()
45      .await
46  }
47
48  pub async fn get_remote_world_limit_per_user(&self) -> Result<u16> {
49    http::json_get("get-remote-world-limit-per-user")
50      .server(self.server)
51      .circuit_breaker(self.circuit_breaker())
52      .retry(&self.retry)
53      .user_agent(&self.user_agent)
54      .send()
55      .await
56  }
57
58  pub async fn get_remote_worlds(&self) -> Result<Vec<RemoteWorld>> {
59    http::json_get("get-remote-worlds")
60      .server(self.server)
61      .circuit_breaker(self.circuit_breaker())
62      .retry(&self.retry)
63      .user_agent(&self.user_agent)
64      .send()
65      .await
66  }
67
68  pub async fn get_world_bots(&self, req: GetWorldBotsRequest) -> Result<Vec<BotId>> {
69    http::json_put("get-world-bots")
70      .body(req)
71      .server(self.server)
72      .circuit_breaker(self.circuit_breaker())
73      .retry(&self.retry)
74      .user_agent(&self.user_agent)
75      .send()
76      .await
77  }
78
79  pub async fn get_world_config(&self, req: GetWorldConfigRequest) -> Result<WorldConfig> {
80    http::json_put("get-world-config")
81      .body(req)
82      .server(self.server)
83      .circuit_breaker(self.circuit_breaker())
84      .retry(&self.retry)
85      .user_agent(&self.user_agent)
86      .send()
87      .await
88  }
89
90  pub async fn get_world_players(&self, req: GetWorldPlayersRequest) -> Result<Vec<PlayerId>> {
91    http::json_put("get-world-players")
92      .body(req)
93      .server(self.server)
94      .circuit_breaker(self.circuit_breaker())
95      .retry(&self.retry)
96      .user_agent(&self.user_agent)
97      .send()
98      .await
99  }
100
101  pub async fn get_world_precursors(
102    &self,
103    req: GetWorldPrecursorsRequest,
104  ) -> Result<Vec<PrecursorId>> {
105    http::json_put("get-world-precursors")
106      .body(req)
107      .server(self.server)
108      .circuit_breaker(self.circuit_breaker())
109      .retry(&self.retry)
110      .user_agent(&self.user_agent)
111      .send()
112      .await
113  }
114
115  pub async fn get_world_stats(&self, req: GetWorldStatsRequest) -> Result<WorldStats> {
116    http::json_put("get-world-stats")
117      .body(req)
118      .server(self.server)
119      .circuit_breaker(self.circuit_breaker())
120      .retry(&self.retry)
121      .user_agent(&self.user_agent)
122      .send()
123      .await
124  }
125
126  pub(super) async fn leave(&self, req: LeaveRequest) -> Result<()> {
127    if self.server.is_local() {
128      http::post("leave")
129        .body(req)
130        .server(self.server)
131        .maybe_authorization(self.authorization.as_ref())
132        .circuit_breaker(self.circuit_breaker())
133        .user_agent(&self.user_agent)
134        .send()
135        .await
136    } else {
137      Ok(())
138    }
139  }
140
141  pub async fn save_local_world(&self, req: SaveLocalWorldRequest) -> Result<()> {
142    if self.server.is_local() {
143      http::post("save-local-world")
144        .body(req)
145        .server(self.server)
146        .maybe_authorization(self.authorization.as_ref())
147        .circuit_breaker(self.circuit_breaker())
148        .user_agent(&self.user_agent)
149        .send()
150        .await
151    } else {
152      Ok(())
153    }
154  }
155}