コード例 #1
0
        /// <summary>
        /// Callback Demande de connexion
        /// </summary>
        /// <param name="asyncResult"></param>
        private void ConnectCB(HttpWebResponse Response)
        {
            if (m_btnConnect != null)
            {
                m_btnConnect.Invoke(new Action(() =>
                {
                    m_btnConnect.Enabled = true;;
                }));
            }
            XmlDocument xmlDoc = null;

            if (Response != null)
            {
                if (Response.StatusCode != HttpStatusCode.OK)
                {
                    Log.LogMessage("Erreur de connexion : " + Response.StatusDescription, Color.DarkViolet);
                }
                xmlDoc = GetResultXml(ref Response);
                Response.Close();
            }
            if (xmlDoc == null)
            {
                Log.LogMessage("Erreur de connexion", Color.DarkViolet);
                return;
            }
            bool    bError = CheckError(xmlDoc);
            XmlNode Node   = GetFirstElement(ref xmlDoc, "loginStatus");

            if (Node != null)
            {
                if (Node.InnerText == "1")
                {
                    m_bConnected = true;
                }
                else
                {
                    m_bConnected = false;
                }
                if (m_bConnected && (!bError))
                {
                    Log.LogMessage("ffs2play est connecté au serveur");
                    XmlNode xmlExternalIP = GetFirstElement(ref xmlDoc, "your_ip");
                    if (xmlExternalIP != null)
                    {
                        IPAddress ExternalIP = IPAddress.Parse("0.0.0.0");
                        if (IPAddress.TryParse(xmlExternalIP.InnerText, out ExternalIP))
                        {
#if DEBUG
                            Log.LogMessage("PManager: Reçu IP Exterieure = " + ExternalIP.ToString(), Color.DarkBlue, 2);
#endif
                        }
                        else
                        {
#if DEBUG
                            Log.LogMessage("PManager: Reçu IP Exterieure invalide", Color.DarkViolet, 2);
#endif
                        }
                        P2P.ExternalIP = ExternalIP;
                    }
                    else
                    {
                        Log.LogMessage("Le serveur n'a pas retourné votre IP extérieure");
                        m_bConnected = false;
                        return;
                    }

                    XmlNode xmlKey = GetFirstElement(ref xmlDoc, "key");
                    if (xmlKey != null)
                    {
                        Key = xmlKey.InnerText;
                        OnLiveUpdate(null, null);
                    }
                    else
                    {
                        Log.LogMessage("Le serveur n'a pas retourné de clé d'authentification");
                    }

                    XmlNode xmlAtc = GetFirstElement(ref xmlDoc, "atc");
                    if (xmlAtc != null)
                    {
                        if (xmlAtc.InnerText != "")
                        {
                            if (Convert.ToBoolean(xmlAtc.InnerText))
                            {
                                ATCTimer.Start();
                            }
                        }
                    }

                    XmlNode AIManagement = GetFirstElement(ref xmlDoc, "AI_Management");
                    if (AIManagement != null)
                    {
                        if (AIManagement.InnerText != "")
                        {
                            m_AIManagement = Convert.ToBoolean(AIManagement.InnerText);
                        }
                    }

                    // Passage du fond du bouton en vert
                    m_btnConnect.Invoke(new Action(() =>
                    {
                        m_btnConnect.ImageIndex = 1;
                        ButtonsTips.SetToolTip(m_btnConnect, "Déconnexion du serveur");
                    }));
                    // On charge la liste des joueurs depuis le wazzup
                    XmlNode Wazzup = GetFirstElement(ref xmlDoc, "whazzup");
                    if (Wazzup != null)
                    {
                        P2P.Wazzup_Update(Wazzup, m_sAESKey);
                    }
                }
                else
                {
                    Log.LogMessage("Le serveur a refusé la connexion");
                    return;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Callback Requete de mise à jour
        /// </summary>
        /// <param name="asyncResult"></param>
        private void LiveUpdateCB(HttpWebResponse Response)
        {
            // Si pas connecté au serveur on ignore le CB
            if (!m_bConnected)
            {
                return;
            }
            XmlDocument xmlDoc = null;

            // On récupère le contenu XML
            if (Response != null)
            {
                xmlDoc = GetResultXml(ref Response);
                Response.Close();
            }
            // Si le contenu est vide on ignore le CB
            if (xmlDoc == null)
            {
                return;
            }

            LastGoodUpdate = DateTimeEx.UtcNowMilli;
            //On vérifie les erreurs retournées par le serveur
            if (CheckError(xmlDoc))
            {
                Disconnect();
                return;
            }
            // On charge la liste des joueurs depuis le wazzup
            XmlNode Wazzup = GetFirstElement(ref xmlDoc, "whazzup");

            if (Wazzup != null)
            {
                P2P.Wazzup_Update(Wazzup, m_sAESKey);
            }
            //On synchronise le serveur avec les AI disponibles
            if ((!m_SyncAIDone) && m_AIManagement)
            {
                if (!Mapping.IsInit)
                {
                    return;
                }
                XmlBuild(ref SendSyncAI, XmlCode.syncai);
                XmlNodeList Nodes = SendSyncAI.GetElementsByTagName("syncai");
                foreach (XmlNode node in Nodes)
                {
                    foreach (XmlNode child in node.ChildNodes)
                    {
                        switch (child.Name)
                        {
                        case "md5list":
                            child.InnerText = Outils.PhpSerialize(Mapping.GetList.Keys);
                            break;
                        }
                    }
                }
                HTTPRequestThread Requete = new HTTPRequestThread(SendSyncAI, m_sURL, SyncAICB);
                Requete.Start();
#if DEBUG
                Log.LogMessage("PManager: Synchronisation des AI : \n" + Beautify(SendSyncAI), Color.DarkRed, 2);
#endif
            }
            // On check la méteo
            XmlNode Metar = GetFirstElement(ref xmlDoc, "metar");
            if (Metar != null)
            {
                MetarUpdate(ref Metar);
            }
        }