[Résolu] Problème joindre salle Google Play Services

Toutes les questions sur le développement Mobile, y compris la partie script.
Senbei
Messages : 6
Inscription : 26 Juin 2019 14:42

[Résolu] Problème joindre salle Google Play Services

Message par Senbei » 26 Juin 2019 15:00

Bonjour,
Désoler, j'aurais besoin d'un peu d'aide.
J'ai un problème de re-connexion a une salle avec google play services.
C'est à dire que la première connexion fonctionne parfaitement, mais pas la deuxième.
Est-ce que c'est un problème qui parle a quelqu'un?

Je joins la classe communication.
Merci!

Code : Tout sélectionner

public class GameComs : MonoBehaviour, RealTimeMultiplayerListener
{

    private static GameComs theOnlyOneGameComs;
    private GameObject go;
    private GameStatus gs;


    private bool inPlayGamesServices;

    public string etatConnexion = "offLine";
    public string etatLocalGame="onMenu";

    // Use this for initialization
    void Start()
    {
        if (theOnlyOneGameComs != null)
        {
            Destroy(this.gameObject);
            return;
        }

        theOnlyOneGameComs = this;
        GameObject.DontDestroyOnLoad(this.gameObject);

        go = GameObject.Find("GameStatus");
        gs = go.GetComponent<GameStatus>();

        // Initialize Play Games Configuration and Activate it.
        PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
         .RequestServerAuthCode(false /*forceRefresh*/)
         .Build();
        PlayGamesPlatform.InitializeInstance(config);
        PlayGamesPlatform.Activate();
        Debug.LogFormat("GameComs: Play Games Configuration initialized");
    }

    public static RealTimeMultiplayerListener Instance => theOnlyOneGameComs;

    public void Update()
    {if (gs.IAOnline == 1)
        {
            if (!checkAuthGooglePlay())
            {
                etatConnexion = "offLine";
            }
            else
            {
                etatConnexion = "connectedToPlayGamesServices";
            }

            if (checkInRoom())
            {
                etatConnexion = "onRoomConnected";
                if (string.Compare(etatLocalGame,"leftTheGame") == 0)
                {
                    PlayGamesPlatform.Instance.RealTime.LeaveRoom();
                }
            }
            else
            {
                etatLocalGame = "onMenu";
            }
        }
    }

    public void signOut()
    {
        PlayGamesPlatform.Instance.SignOut();
    }

    public bool checkAuthGooglePlay()
    {
        return UnityEngine.Social.localUser.authenticated;
    }


    public bool checkInRoom()
    {
        return PlayGamesPlatform.Instance.RealTime.IsRoomConnected();
    }

    public void SignInWithPlayGames()
    {
        // Initialize Firebase Auth
        Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

        // Sign In and Get a server auth code.
        UnityEngine.Social.localUser.Authenticate((bool success) => {
            if (!success)
            {
                Debug.LogError("GameComs: Failed to Sign into Play Games Services.");
                
                return;
            }
            else
            {
                etatConnexion = "connectedToPlayGamesServices";
            }

            inPlayGamesServices = false;

            string authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
            if (string.IsNullOrEmpty(authCode))
            {
                Debug.LogError("GameComs: Signed into Play Games Services but failed to get the server auth code.");
                return;
            }
            Debug.LogFormat("GameComs: Auth code is: {0}", authCode);

            // Use Server Auth Code to make a credential
            Firebase.Auth.Credential credential = Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);

            // Sign In to Firebase with the credential
            auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
                if (task.IsCanceled)
                {
                    Debug.LogError("GameComs was canceled.");
                    return;
                }
                if (task.IsFaulted)
                {
                    Debug.LogError("GameComs encountered an error: " + task.Exception);
                    return;
                }

                Firebase.Auth.FirebaseUser newUser = task.Result;
                Debug.LogFormat("GameComs: User signed in successfully: {0} ({1})", newUser.DisplayName, newUser.UserId);
            });
        });
    }

        public void quickGame()
    {
        etatLocalGame = "startingGame";
        const int MinOpponents = 1, MaxOpponents = 1;
        const int GameVariant = 0;
        PlayGamesPlatform.Instance.RealTime.CreateQuickGame(MinOpponents, MaxOpponents,
                    GameVariant, Instance);
    }

    public void whithInvitationScreen()
    {
        etatLocalGame = "startingGame";
        const int MinOpponents = 1, MaxOpponents = 1;
        const int GameVariant = 0;
        PlayGamesPlatform.Instance.RealTime.CreateWithInvitationScreen(MinOpponents, MaxOpponents,
                    GameVariant, Instance);
    }

    public void showInvitationInbox()
    {
        
        PlayGamesPlatform.Instance.RealTime.AcceptFromInbox(Instance);
    }




    public void sendMessage(string type, string mess)
    {
        string m = type + ":" + mess;
        byte[] message = System.Text.Encoding.ASCII.GetBytes(m);
        bool reliable = true;
        PlayGamesPlatform.Instance.RealTime.SendMessageToAll(reliable, message);
    }

    private int myRandomValForFirctPlayer;
    

    public void getBeginner()
    {
        System.Random rnd = new System.Random();
        myRandomValForFirctPlayer = rnd.Next(0, 100);
        sendMessage("R", myRandomValForFirctPlayer.ToString());
    }

    public void sendSelected(string name)
    {
        sendMessage("S", "1/" + name);
    }

    public void sendUnselected(String name)
    {
        sendMessage("S", "0/" + name);
    }

    public void sendAction()
    {
        sendMessage("A", null);
    }

    public void sendConced()
    {
        sendMessage("C", null);
    }

    public void sendNext()
    {
        sendMessage("N", null);
    }

    public void sendQuit()
    {
        sendMessage("Q", null);
        etatLocalGame = "leftTheGame";
    }


    private void receivedMessage(string type, string mess)
    {
        switch (type)
        {
            case "R":
                {
                    int oppVal = int.Parse(mess);
                    if (myRandomValForFirctPlayer > oppVal){gs.PlayerStarter = 1; gs.ToHuman = false; break;}
                    if(myRandomValForFirctPlayer < oppVal) { gs.PlayerStarter = 2; gs.ToHuman = true; break; }
                    getBeginner();
                    break;
                }
            case "S":
                {
                    string[] messSplited = mess.Split('/');
                    PlanetModelScript pms = gs.getScript(gs.getPos(messSplited[1]));
                    if (messSplited[0] == "1"){ pms.select();}
                    if(messSplited[0] == "0") { pms.unSelect();}
                    break;
                }
            case "A":
                {
                    gs.castSelected(1);
                    break;
                }
            case "N":
                {
                    gs.StopCoroutines();
                    SceneManager.LoadScene("game");
                    break;
                }
            case "C":
                {
                    gs.saveEndGame(0, false);
                    gs.endGame();
                    break;
                }
            case "Q":
                {
                    gs.saveEndGame(0, false);
                    gs.gameVicStatus = "vic";
                    gs.endGame();
                    break;
                }
        }

    }

    public void OnRoomSetupProgress(float percent)
    {
        etatLocalGame = "startingGame";
        if (percent >= 20f)
        {
            etatConnexion = "onWaitingRoom";
            PlayGamesPlatform.Instance.RealTime.ShowWaitingRoomUI();
        }
    }


    public void OnRoomConnected(bool success)
    {
        
        if (success)
        {
            etatLocalGame = "inGame";
            etatConnexion = "onRoomConnected";
            SceneManager.LoadScene("game");
        }
        else
        {
            etatLocalGame = "onMenu";
            etatConnexion = "failToRoomConnected";
        }

    }

    public void OnLeftRoom()
    {
        etatLocalGame = "onMenu";
    }

    public void OnParticipantLeft(Participant participant)
    {
       
    }

    public void OnPeersConnected(string[] participantIds)
    {
        throw new System.NotImplementedException();
    }

    public void OnPeersDisconnected(string[] participantIds)
    {
        throw new System.NotImplementedException();
    }

    public void OnRealTimeMessageReceived(bool isReliable, string senderId, byte[] data)
    {
        string[] splitedData = System.Text.Encoding.ASCII.GetString(data).Split(':');

        receivedMessage(splitedData[0], splitedData[1]);

    }
}

Dernière édition par Senbei le 28 Juin 2019 20:35, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème joindre salle Google Play Services

Message par boubouk50 » 26 Juin 2019 15:10

Senbei a écrit :
26 Juin 2019 15:00
J'ai un problème de re-connexion a une salle avec google play services.
Peux-tu nous donner plus d'information là dessus?
Est-ce une déconnexion volontaire?
La reconnexion utilise les mêmes identifiants?
Es-tu en version publiée ou développement?
As-tu des messages en console qui permettent de situer un peu mieux le problème?
As-tu suivi un tuto, repris un code, ou autre quelque part? (donne nous le lien)

Poser seulement 150 lignes de code ne nous permet pas de trouver le pb. Donne le max d'info stp.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Senbei
Messages : 6
Inscription : 26 Juin 2019 14:42

Re: Problème joindre salle Google Play Services

Message par Senbei » 26 Juin 2019 15:39

D'abords merci pour ta réponse.

J'ai suivi ce tuto:
https://www.youtube.com/watch?v=Jvk8kAKOhas

Par re-connexion je veux dire quand je relance l'une de ces fonctions:

Code : Tout sélectionner

PlayGamesPlatform.Instance.RealTime.CreateQuickGame(MinOpponents, MaxOpponents,
                    GameVariant, Instance);
                    
PlayGamesPlatform.Instance.RealTime.CreateWithInvitationScreen(MinOpponents, MaxOpponents,
                    GameVariant, Instance);

PlayGamesPlatform.Instance.RealTime.AcceptFromInbox(Instance);
Alors qu'une salle a déjà était créer, une partie joué, puis quitter avec :

Code : Tout sélectionner

PlayGamesPlatform.Instance.RealTime.LeaveRoom();
Je suis en version bêta.

Pas de message console, je teste avec nox et mon smartphone... (désoler je suis très débutant)

Désoler pour le manque d'informations.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème joindre salle Google Play Services

Message par boubouk50 » 26 Juin 2019 15:52

Tu dois avoir un Log de créé et qui enregistre tout. Essaie de le trouver et de me le donner. Ça aidera grandement.

Sinon, dans ton code, quand tu quittes la room, tu devrais réinitialiser etatLocalGame car il reste à leftTheGame. Du coup, lors de l'Update tu risques de la quitter immédiatement.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Senbei
Messages : 6
Inscription : 26 Juin 2019 14:42

Re: Problème joindre salle Google Play Services

Message par Senbei » 26 Juin 2019 16:53

Comment je t'envoi les logs?

normalement le Update lance :

Code : Tout sélectionner

PlayGamesPlatform.Instance.RealTime.LeaveRoom();
qui lui même lance:

Code : Tout sélectionner

    public void OnLeftRoom()
    {
        etatLocalGame = "onMenu";
    }

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème joindre salle Google Play Services

Message par boubouk50 » 26 Juin 2019 17:03

Tu peux joindre un fichier texte il me semble. Sinon, tu as des sites comme https://hastebin.com/ pour copier coller du texte/code.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Senbei
Messages : 6
Inscription : 26 Juin 2019 14:42

Re: Problème joindre salle Google Play Services

Message par Senbei » 26 Juin 2019 17:22

Voila les logs. J'espère que ca pourra t'aider.
Dernière édition par Senbei le 28 Juin 2019 20:36, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème joindre salle Google Play Services

Message par boubouk50 » 27 Juin 2019 09:19

Tu as plusieurs choses qui apparaissent:
Une erreur récurrente:
E/Unity ( 3660): NullReferenceException: Object reference not set to an instance of an object.
E/Unity ( 3660): at GameComs.checkInRoom () [0x00000] in <00000000000000000000000000000000>:0
E/Unity ( 3660): at GameComs.Update () [0x00000] in <00000000000000000000000000000000>:0

L'update() appelle, checkInRoom () et dans cette fonction, il y a une variable qui vaut null alors qu'elle devrait avoir une valeur.
Et cette erreur:
W/Unity ( 3660): *** [Play Games Plugin DLL] 06/26/19 16:11:45 +02:00 ERROR: Received attempt to create a new room without cleaning up the old one.

Mon avis:
CheckInRoom () te permet de savoir si tu es connecté ou non et il renvoie une erreur. Donc dans ton Update () tu ne vas pas plus loin donc PlayGamesPlatform.Instance.RealTime.LeaveRoom(); n'est jamais appelé.
Fais des tests de ce côté-ci.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Senbei
Messages : 6
Inscription : 26 Juin 2019 14:42

Re: Problème joindre salle Google Play Services

Message par Senbei » 27 Juin 2019 12:22

Non ce n'est pas ca.
L'erreur est corriger. C’était une erreur con, le update tourne avant la fonction SignInWithPlayGames().

Est-ce que je peux installer mon apk directement sur nox ou je dois passé par Google Play Console?
(Il y a un problème d'uid apparemment... cela te parle?)

Et au passage comment avoir les logs de connexions, echec aux connexion en salle... ?

Merci.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Problème joindre salle Google Play Services

Message par boubouk50 » 27 Juin 2019 13:55

Je n'en sais absolument rien. :gene:
Désolé. Je n'ai jamais utilisé tout ceci. Je ne peux que t'assister dans ton propre débogage.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « Développement plateformes mobile Iphone et Android »