Advertisement
elenalotus

Untitled

Apr 27th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.54 KB | None | 0 0
  1. Imports System.IO
  2. Imports System.Net
  3. Imports System.ComponentModel
  4. Imports System.Xml.Serialization
  5. Imports System
  6. Imports WMPLib
  7.  
  8. Public Class MainForm
  9. 'Version Launcher
  10. Dim latestversion As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://tavianalife.com/launcher/version.txt")
  11. Dim response As System.Net.HttpWebResponse = latestversion.GetResponse()
  12. Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())
  13. Dim newestversion As String = sr.ReadToEnd()
  14. 'Version Launcher Client
  15. Dim file4 As String = Application.ProductVersion
  16. 'AppData
  17. Public appdata As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\TavianaLife\"
  18. #Region " Attributs "
  19. Private webClient As WebClient
  20. Private player As WindowsMediaPlayer = New WindowsMediaPlayer
  21.  
  22. Private aInfoFichierServeur As Entites.FichierXml
  23. Private aListeInfoFichierLocal As List(Of Entites.Fichier)
  24. Private aListeFichierDownload As List(Of Entites.Fichier)
  25.  
  26. Private sounds As List(Of String)
  27. Private playing As Boolean = True
  28. Private activeSound As Integer = 0
  29.  
  30. Private activedwl As Integer = 0
  31. Private dwlBytes As Long = 0
  32. Private totalBytes As Long = 0
  33.  
  34. #End Region
  35.  
  36. #Region " Propriétés "
  37.  
  38. ''' <summary>
  39. ''' Information des fichiers sur le serveur
  40. ''' </summary>
  41. Private Property InfoFichierServeur() As Entites.FichierXml
  42. Get
  43. If aInfoFichierServeur Is Nothing Then
  44. aInfoFichierServeur = New Entites.FichierXml
  45. End If
  46. Return aInfoFichierServeur
  47. End Get
  48. Set(ByVal value As Entites.FichierXml)
  49. aInfoFichierServeur = value
  50. End Set
  51. End Property
  52.  
  53. ''' <summary>
  54. ''' Liste d'information des fichiers local
  55. ''' </summary>
  56. Private Property ListeInfoFichierLocal() As List(Of Entites.Fichier)
  57. Get
  58. If aListeInfoFichierLocal Is Nothing Then
  59. aListeInfoFichierLocal = New List(Of Entites.Fichier)
  60. End If
  61. Return aListeInfoFichierLocal
  62. End Get
  63. Set(ByVal value As List(Of Entites.Fichier))
  64. aListeInfoFichierLocal = value
  65. End Set
  66. End Property
  67.  
  68. ''' <summary>
  69. ''' Liste d'information des fichiers local
  70. ''' </summary>
  71. Private Property ListeFichierDownload() As List(Of Entites.Fichier)
  72. Get
  73. If aListeFichierDownload Is Nothing Then
  74. aListeFichierDownload = New List(Of Entites.Fichier)
  75. End If
  76. Return aListeFichierDownload
  77. End Get
  78. Set(ByVal value As List(Of Entites.Fichier))
  79. aListeFichierDownload = value
  80. End Set
  81. End Property
  82.  
  83. #End Region
  84.  
  85. #Region " Launching "
  86.  
  87. Private Sub Set_Sounds()
  88. sounds = New List(Of String)
  89. Try
  90. ObtenirInfoFichierServeur(My.Settings.InfosSound)
  91.  
  92. For Each sound In InfoFichierServeur.ListeFichier
  93. sounds.Add(sound.Path)
  94. Next
  95. Catch ex As Exception
  96. MsgBox("Erreur de connexion au serveur distant. Contacter un administrateur.", MsgBoxStyle.Information, "Taviana Life France")
  97. End Try
  98. InfoFichierServeur = Nothing
  99. End Sub
  100.  
  101. Private Sub MainForm_load(sender As Object, e As EventArgs) Handles MyBase.Load
  102. If My.Computer.FileSystem.FileExists(appdata & "dmod.a3") Then
  103. My.Settings.GameEXEPath = My.Computer.FileSystem.ReadAllText(appdata & "dmod.a3")
  104. End If
  105. pathTB.Text = ("Destination Arma 3: " & My.Settings.GameEXEPath)
  106. If newestversion.Contains(file4) Then
  107. ITalk_Label6.ForeColor = Color.Green
  108. ITalk_Label6.Text = file4
  109. Else
  110. ITalk_Label6.ForeColor = Color.Red
  111. ITalk_Label6.Text = file4
  112. End If
  113. Set_Sounds()
  114. If sounds.Count > 0 Then
  115. player.URL = My.Settings.ServerIp & sounds(0)
  116. player.settings.setMode("Loop", False)
  117. player.controls.play()
  118. playBtn.Refresh()
  119. CheckUpdate()
  120. Else
  121. Close()
  122. End If
  123. End Sub
  124.  
  125. #End Region
  126.  
  127. Private Sub OKToPlay()
  128. playBtn.Visible = False
  129. Close()
  130. End Sub
  131.  
  132. #Region " Validation "
  133.  
  134. Private Function CheckUpdate() As Boolean
  135. playBtn.Text = "Recherche de Mise à jour..."
  136. playBtn.Visible = True
  137.  
  138. Try
  139. 'Mauvais Path
  140. If Not File.Exists(My.Settings.GameEXEPath) Then
  141. playBtn.Text = "Veuillez indiquer le chemin d'accès au fichier " & My.Settings.GameEXE
  142. Return False
  143. End If
  144.  
  145. pathTB.Text = My.Settings.GameEXEPath
  146. My.Settings.GameFolderPath = Path.GetDirectoryName(My.Settings.GameEXEPath)
  147.  
  148. Try
  149. ObtenirInfoFichierServeur(My.Settings.InfosMod)
  150.  
  151. ValidateFiles()
  152. Return False
  153. Catch ex As Exception
  154. playBtn.Text = "Erreur de connexion au server #Log:" & ex.Message
  155. Return False
  156. End Try
  157. Catch ex As Exception
  158. playBtn.Text = "Veuillez indiquer le chemin d'accès au fichier " & My.Settings.GameEXE
  159. Return False
  160. End Try
  161. End Function
  162.  
  163. ''' <summary>
  164. ''' Permet d'obtenir l'information sur les fichiers sur le serveur
  165. ''' </summary>
  166. Private Sub ObtenirInfoFichierServeur(ByVal fichier As String)
  167.  
  168. webClient = New WebClient
  169. Dim fichierXmlServeur() As Byte = webClient.DownloadData(My.Settings.ServerIp & fichier)
  170.  
  171. Dim contenuXml As String = System.Text.Encoding.UTF8.GetString(fichierXmlServeur)
  172.  
  173. Dim objStringReader As New StringReader(contenuXml)
  174. Dim x As New XmlSerializer(InfoFichierServeur.GetType)
  175. InfoFichierServeur = DirectCast(x.Deserialize(objStringReader), Entites.FichierXml)
  176. objStringReader.Close()
  177.  
  178. End Sub
  179.  
  180. ''' <summary>
  181. ''' Permet d'orbtenir l'information sur les fichiers localement
  182. ''' </summary>
  183. Private Sub ObtenirInfoFichierLocal()
  184.  
  185. Dim infoFichier As FileInfo = Nothing
  186. Dim pathLocal As String = String.Empty
  187. Dim sx() As String
  188.  
  189. If Not Directory.Exists(String.Format("{0}\{1}", My.Settings.GameFolderPath, My.Settings.ModFolderName)) Then
  190. Directory.CreateDirectory(String.Format("{0}\{1}", My.Settings.GameFolderPath, My.Settings.ModFolderName))
  191. End If
  192.  
  193. For Each fichierTrouver In My.Computer.FileSystem.GetFiles(String.Format("{0}\{1}", My.Settings.GameFolderPath, My.Settings.ModFolderName), FileIO.SearchOption.SearchAllSubDirectories, "*")
  194.  
  195. infoFichier = My.Computer.FileSystem.GetFileInfo(fichierTrouver)
  196.  
  197. If fichierTrouver IsNot Nothing Then
  198.  
  199. sx = Split(fichierTrouver, "@")
  200. pathLocal = "@" & sx(1)
  201.  
  202. ListeInfoFichierLocal.Add(New Entites.Fichier With
  203. {.Path = pathLocal,
  204. .TotalBytes = infoFichier.Length})
  205. End If
  206. Next
  207. End Sub
  208.  
  209. Private Sub ComparerListes()
  210.  
  211. Dim listeDifferenceFichierLocal As IEnumerable(Of Entites.Fichier) =
  212. From o In InfoFichierServeur.ListeFichier
  213. Where Not ListeInfoFichierLocal.Exists(Function(x) x.Path.ToLower = o.Path.ToLower AndAlso
  214. x.TotalBytes = o.TotalBytes)
  215. Select o
  216.  
  217. Dim listeDifferenceFichierServeur As IEnumerable(Of Entites.Fichier) =
  218. From o In ListeInfoFichierLocal
  219. Where Not InfoFichierServeur.ListeFichier.Exists(Function(x) x.Path.ToLower = o.Path.ToLower AndAlso
  220. x.TotalBytes = o.TotalBytes)
  221. Select o
  222.  
  223. If Not listeDifferenceFichierServeur.Any Then
  224. MsgBox("Une mise à jour des addons est disponible, Appuyez sur OK..", MsgBoxStyle.Information, "Taviana Life France")
  225. SupprimerFichierLocal(listeDifferenceFichierServeur)
  226. End If
  227.  
  228. If listeDifferenceFichierLocal.Any Then
  229. ListeFichierDownload = New List(Of Entites.Fichier)(listeDifferenceFichierLocal)
  230.  
  231. End If
  232.  
  233. PreDownload()
  234. End Sub
  235.  
  236. ''' <summary>
  237. ''' Permet de supprimer les fichiers localement qui ne sont plus sur le serveur
  238. ''' </summary>
  239. ''' <param name="pListeDifferenceFichierServeur">Liste de différence de fichier sur le serveur</param>
  240. Private Sub SupprimerFichierLocal(pListeDifferenceFichierServeur As IEnumerable(Of Entites.Fichier))
  241.  
  242. Dim pathFichier As String = String.Empty
  243.  
  244. For Each fichierServeur In pListeDifferenceFichierServeur
  245.  
  246. pathFichier = String.Format("{0}\{1}",
  247. My.Settings.GameFolderPath,
  248. fichierServeur.Path)
  249.  
  250. If File.Exists(pathFichier) Then
  251.  
  252. File.Delete(pathFichier)
  253.  
  254. End If
  255.  
  256. Next
  257.  
  258. End Sub
  259.  
  260. Private Sub ValidateFiles()
  261. playBtn.Enabled = False
  262.  
  263. Try
  264. 'Étape 1 - Obtenir les information des fichiers localement
  265. ObtenirInfoFichierLocal()
  266.  
  267. 'Étape 2 - Comparer les fichiers serveur et local pour les différences,
  268. ' sinon tout télécharger les fichiers du serveur si le dossier local est vide
  269. If ListeInfoFichierLocal IsNot Nothing AndAlso
  270. ListeInfoFichierLocal.Any Then
  271. ComparerListes()
  272. Else
  273. ListeFichierDownload = New List(Of Entites.Fichier)(InfoFichierServeur.ListeFichier)
  274. PreDownload()
  275. End If
  276.  
  277. Catch ex As Exception
  278.  
  279. playBtn.Text = "Erreur lors du téléchargement de fichiers... #Log: " & ex.Message
  280. Application.Exit()
  281. End Try
  282. End Sub
  283.  
  284. #End Region
  285.  
  286. #Region " Download "
  287.  
  288. Private Sub PreDownload()
  289. If ListeFichierDownload.Any Then
  290. totalBytes = 0
  291.  
  292. For Each fichier In ListeFichierDownload
  293. totalBytes += fichier.TotalBytes
  294. Next
  295. filePB.Visible = True
  296. globalPB.Visible = True
  297.  
  298. DownloadFiles()
  299. Else
  300. OKToPlay()
  301. End If
  302. End Sub
  303.  
  304. ''' <summary>
  305. ''' Permet d'obtenir tout les fichier sur le serveur
  306. ''' </summary>
  307. Private Sub DownloadFiles()
  308. webClient = New WebClient
  309.  
  310. If ListeFichierDownload(activedwl).Path.Where(Function(x) x = "\").Count > 1 Then
  311. Dim segmentPath() As String = ListeFichierDownload(activedwl).Path.Split("\"c)
  312. Dim repertoirACreer As String = segmentPath(1)
  313.  
  314. If Not Directory.Exists(String.Format("{0}\{1}\{2}", My.Settings.GameFolderPath, My.Settings.ModFolderName, repertoirACreer)) Then
  315. Directory.CreateDirectory(String.Format("{0}\{1}\{2}", My.Settings.GameFolderPath, My.Settings.ModFolderName, repertoirACreer))
  316. End If
  317. End If
  318.  
  319. webClient.DownloadFileAsync(
  320. New Uri(String.Format("{0}{1}", My.Settings.ServerIp, ListeFichierDownload(activedwl).Path)), String.Format("{0}\{1}",
  321. My.Settings.GameFolderPath,
  322. ListeFichierDownload(activedwl).Path))
  323. AddHandler webClient.DownloadProgressChanged, AddressOf WC_DownloadProgressChanged
  324. AddHandler webClient.DownloadFileCompleted, AddressOf WC_DownloadFileCompleted
  325. End Sub
  326.  
  327. #End Region
  328.  
  329. #Region " Event "
  330.  
  331. Private Sub WC_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
  332. Dim now As Integer = (e.BytesReceived / 1000) / 1000
  333. Dim total As Integer = (e.TotalBytesToReceive / 1000) / 1000
  334. Dim globalPourcent = Format(((dwlBytes + e.BytesReceived) / totalBytes) * 100, "0.00")
  335. Dim globalNow As Integer = ((dwlBytes + e.BytesReceived) / 1000) / 1000
  336. Dim globalTotal As Integer = (totalBytes / 1000) / 1000
  337.  
  338. playBtn.Text = globalPourcent & "% " & "Mis à Jour " & globalNow & "Mo de " & globalTotal & "Mo" & vbCrLf & now & "Mo de " & total & "Mo"
  339. globalPB.Value = globalPourcent
  340. filePB.Value = e.ProgressPercentage
  341. End Sub
  342.  
  343. Private Sub WC_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs)
  344. dwlBytes += ListeFichierDownload(activedwl).TotalBytes
  345. activedwl += 1
  346.  
  347. If activedwl < ListeFichierDownload.Count Then
  348. DownloadFiles()
  349. Else
  350. filePB.Visible = False
  351. globalPB.Visible = False
  352. My.Settings.ModVersion = InfoFichierServeur.Version
  353. OKToPlay()
  354. End If
  355. End Sub
  356.  
  357. #End Region
  358.  
  359. #Region " Gestion Btn Click "
  360.  
  361. #Region " Main "
  362.  
  363. Private Sub BrowseBtn_Click_1(sender As Object, e As EventArgs) Handles BrowseBtn.Click
  364. Dim fileDiag As OpenFileDialog
  365. fileDiag = New OpenFileDialog
  366. fileDiag.InitialDirectory = "C:\"
  367. fileDiag.Filter = "Exécutable Arma3|" & My.Settings.GameEXE
  368.  
  369. If fileDiag.ShowDialog = Windows.Forms.DialogResult.OK Then
  370. My.Settings.GameEXEPath = fileDiag.FileName
  371. My.Settings.GameFolderPath = Path.GetDirectoryName(My.Settings.GameEXEPath)
  372. My.Settings.ModVersion = 0
  373. My.Computer.FileSystem.WriteAllText(appdata & "dmod.a3", My.Settings.GameEXEPath, False)
  374. pathTB.Text = My.Settings.GameEXEPath
  375.  
  376. If CheckUpdate() Then
  377. OKToPlay()
  378. End If
  379. End If
  380. End Sub
  381.  
  382. #End Region
  383.  
  384. #Region " Sound "
  385.  
  386. Private Function validateIndex(ByVal index As Integer) As Boolean
  387. Return index >= 0 AndAlso index < sounds.Count
  388. End Function
  389.  
  390. Private Sub ITalk_LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles ITalk_LinkLabel1.LinkClicked
  391. Process.Start("http://tavianalife.com/forum/index.php?/user/1-ac1d-r41n/")
  392. End Sub
  393.  
  394. Private Sub ITalk_LinkLabel1_LinkClicked_1(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles ITalk_LinkLabel1.LinkClicked
  395. Process.Start("http://tavianalife.com/forum/index.php?/user/1-ac1d-r41n/")
  396. End Sub
  397. #End Region
  398.  
  399. #End Region
  400.  
  401. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement