Added documents
This commit is contained in:
30 files changed
+1423
-132
No files matched your search
@@ -0,0 +1,45 @@
|
||||
# 前言
|
||||
|
||||
`libmc-protocol-context` 中提供了默认HTTP客户端实现, 如果使用了此模块则不需要手动配置HTTP客户端认证部分
|
||||
|
||||
# 基于Ktor的HTTP客户端
|
||||
|
||||
```kotlin
|
||||
private val httpClient = HttpClient()
|
||||
|
||||
public val CustomProtocolContext: ProtocolContextBuilder.() -> Unit = {
|
||||
authProvider = AuthenticationProvider { url, accessToken, uuid, serverIdHash ->
|
||||
val status = httpClient.post(url) {
|
||||
headers { header("Content-Type", "application/json") }
|
||||
setBody("{\"accessToken\":\"$accessToken\", \"selectedProfile\":\"$uuid\", \"serverId\":\"$serverIdHash\"}")
|
||||
}.status
|
||||
require(status == HttpStatusCode.NoContent)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
# 基于Java8 HttpURLConnection的HTTP客户端
|
||||
|
||||
```kotlin
|
||||
private fun sendJoinRequest(url: String, accessToken: String, uuid: String, serverIdHash: String): Boolean {
|
||||
val connection = (URL(url).openConnection() as HttpURLConnection).apply {
|
||||
requestMethod = "POST"
|
||||
setRequestProperty("Content-Type", "application/json")
|
||||
doOutput = true
|
||||
connectTimeout = 5000
|
||||
readTimeout = 5000
|
||||
}
|
||||
val jsonPayload = """{"accessToken":"$accessToken","selectedProfile":"$uuid","serverId":"$serverIdHash"}"""
|
||||
connection.outputStream.use { os -> os.write(jsonPayload.toByteArray(Charsets.UTF_8)) }
|
||||
val responseCode = connection.responseCode
|
||||
connection.disconnect()
|
||||
return responseCode == HttpURLConnection.HTTP_NO_CONTENT
|
||||
}
|
||||
|
||||
public val CustomProtocolContext: ProtocolContextBuilder.() -> Unit = {
|
||||
authProvider = AuthenticationProvider { url, accessToken, uuid, serverIdHash ->
|
||||
val success = sendJoinRequest(url, accessToken, uuid, serverIdHash)
|
||||
require(success) { "Failed to authenticate with Mojang session server" }
|
||||
}
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user