ошибка при подключении игрока к игре
При подключении игрока к игре появляется ошибка Closing connection: connection(0). Received message Mirror.RpcMessage that required authentication, but the user has not authenticated yet.
скрипт аунтефикации
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
namespace Mirror.Authenticators
{
[AddComponentMenu("Network/ Authenticators/Basic Authenticator")]
[HelpURL("https://mirror-networking.gitbook.io/docs/components/network-authenticators/basic-authenticator")]
public class BasicAuthenticator : NetworkAuthenticator
{
public string username;
public string password;
readonly HashSet<NetworkConnection> connectionsPendingDisconnect = new HashSet<NetworkConnection>();
public delegate void OnSpawnPlayer(NetworkConnectionToClient conn, PlayerData playerData);
public event OnSpawnPlayer SpawnPlayer;
#region Messages
public struct AuthRequestMessage : NetworkMessage
{
public string authUsername;
public string authPassword;
}
public struct PlayerData : NetworkMessage
{
public AuthRequestMessage AuthData;
public string Name;
public string Prime;
public string Cups;
}
public struct AuthResponseMessage : NetworkMessage
{
public byte code;
public string message;
}
#endregion
#region Server
public override void OnStartServer()
{
NetworkServer.RegisterHandler<PlayerData>(OnAuthRequestMessage, false);
}
public override void OnStopServer()
{
NetworkServer.UnregisterHandler<PlayerData>();
}
public void OnAuthRequestMessage(NetworkConnectionToClient conn, PlayerData msg)
{
if (!connectionsPendingDisconnect.Contains(conn))
StartCoroutine(OnAuthRequestMessageIE(conn, msg));
}
private IEnumerator OnAuthRequestMessageIE(NetworkConnectionToClient conn, PlayerData msg)
{
WWWForm form = new WWWForm();
form.AddField("login", msg.AuthData.authUsername);
form.AddField("password", msg.AuthData.authPassword);
UnityWebRequest www = UnityWebRequest.Post("http://epicgametest.net/authorization.php", form);
yield return www.SendWebRequest();
if (www.result == UnityWebRequest.Result.ConnectionError)
Debug.Log(www.error);
if (www.downloadHandler.text == "0")
{
AuthResponseMessage authResponseMessage = new AuthResponseMessage
{
code = 100,
message = "Success"
};
conn.Send(authResponseMessage);
ServerAccept(conn);
SpawnPlayer?.Invoke(conn, msg);
}
else
{
connectionsPendingDisconnect.Add(conn);
AuthResponseMessage authResponseMessage = new AuthResponseMessage
{
code = 200,
message = "Invalid Credentials"
};
conn.Send(authResponseMessage);
conn.isAuthenticated = false;
StartCoroutine(DelayedDisconnect(conn, 1f));
}
www.Dispose();
}
IEnumerator DelayedDisconnect(NetworkConnectionToClient conn, float waitTime)
{
yield return new WaitForSeconds(waitTime);
ServerReject(conn);
yield return null;
connectionsPendingDisconnect.Remove(conn);
Debug.Log("reget0");
}
#endregion
#region Client
public override void OnStartClient()
{
NetworkClient.RegisterHandler<AuthResponseMessage>(OnAuthResponseMessage, false);
}
public override void OnStopClient()
{
NetworkClient.UnregisterHandler<AuthResponseMessage>();
}
public override void OnClientAuthenticate()
{
Debug.Log(123);
AuthRequestMessage authRequestMessage = new AuthRequestMessage
{
authUsername = username,
authPassword = password
};
PlayerData playerData = new PlayerData
{
AuthData = authRequestMessage,
Name = null
};
NetworkClient.connection.Send(playerData);
}
public void OnAuthResponseMessage(AuthResponseMessage msg)
{
if (msg.code == 100)
{
ClientAccept();
}
else
{
Debug.LogError($"Authentication Response: {msg.message}");
ClientReject();
}
}
#endregion
}
}