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::world::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 delete_remote_world(&self, req: DeleteRemoteWorldRequest) -> Result<()> {
28    http::post("delete-remote-world")
29      .body(req)
30      .server(self.server)
31      .maybe_authorization(self.authorization.as_ref())
32      .circuit_breaker(self.circuit_breaker())
33      .user_agent(&self.user_agent)
34      .send()
35      .await
36  }
37
38  pub async fn get_remote_world(&self, req: GetRemoteWorldRequest) -> Result<RemoteWorld> {
39    http::json_put("get-remote-world")
40      .body(req)
41      .server(self.server)
42      .circuit_breaker(self.circuit_breaker())
43      .retry(&self.retry)
44      .user_agent(&self.user_agent)
45      .send()
46      .await
47  }
48
49  pub async fn get_remote_world_limit(&self) -> Result<u16> {
50    http::json_get("get-remote-world-limit")
51      .server(self.server)
52      .circuit_breaker(self.circuit_breaker())
53      .retry(&self.retry)
54      .user_agent(&self.user_agent)
55      .send()
56      .await
57  }
58
59  pub async fn get_remote_world_limit_per_user(&self) -> Result<u16> {
60    http::json_get("get-remote-world-limit-per-user")
61      .server(self.server)
62      .circuit_breaker(self.circuit_breaker())
63      .retry(&self.retry)
64      .user_agent(&self.user_agent)
65      .send()
66      .await
67  }
68
69  pub async fn get_remote_worlds(&self) -> Result<Vec<RemoteWorld>> {
70    http::json_get("get-remote-worlds")
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_bots(&self, req: GetWorldBotsRequest) -> Result<Vec<BotId>> {
80    http::json_put("get-world-bots")
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_config(&self, req: GetWorldConfigRequest) -> Result<WorldConfig> {
91    http::json_put("get-world-config")
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_players(&self, req: GetWorldPlayersRequest) -> Result<Vec<PlayerId>> {
102    http::json_put("get-world-players")
103      .body(req)
104      .server(self.server)
105      .circuit_breaker(self.circuit_breaker())
106      .retry(&self.retry)
107      .user_agent(&self.user_agent)
108      .send()
109      .await
110  }
111
112  pub async fn get_world_precursors(
113    &self,
114    req: GetWorldPrecursorsRequest,
115  ) -> Result<Vec<PrecursorId>> {
116    http::json_put("get-world-precursors")
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 async fn get_world_stats(&self, req: GetWorldStatsRequest) -> Result<WorldStats> {
127    http::json_put("get-world-stats")
128      .body(req)
129      .server(self.server)
130      .circuit_breaker(self.circuit_breaker())
131      .retry(&self.retry)
132      .user_agent(&self.user_agent)
133      .send()
134      .await
135  }
136
137  pub(super) async fn leave(&self, req: LeaveRequest) -> Result<()> {
138    if self.server.is_local() {
139      http::post("leave")
140        .body(req)
141        .server(self.server)
142        .maybe_authorization(self.authorization.as_ref())
143        .circuit_breaker(self.circuit_breaker())
144        .user_agent(&self.user_agent)
145        .send()
146        .await
147    } else {
148      Ok(())
149    }
150  }
151
152  pub async fn save_local_world(&self, req: SaveLocalWorldRequest) -> Result<()> {
153    if self.server.is_local() {
154      http::post("save-local-world")
155        .body(req)
156        .server(self.server)
157        .maybe_authorization(self.authorization.as_ref())
158        .circuit_breaker(self.circuit_breaker())
159        .user_agent(&self.user_agent)
160        .send()
161        .await
162    } else {
163      Ok(())
164    }
165  }
166}