1- Imports System.IO
1+ Imports System.Collections.ObjectModel
2+ Imports System.IO
23Imports System.Threading.Tasks
34Imports fNbt
45Imports PCL.Core.Link
@@ -82,33 +83,42 @@ Public Class PageInstanceServer
8283 ServerCardList.Add(serverCard)
8384 PanServers.Children.Add(serverCard)
8485
85- Await serverCard.RefreshServerStatus( False )
86-
87- Dim nbtData = Await NbtFileHandler.ReadNbtFileAsync( Of NbtList)(Path.Combine(PageInstanceLeft.Instance.PathIndie, "servers.dat" ), "servers" )
86+ Task.Run( Async Function ()
87+ Await serverCard.RefreshServerStatus( False )
88+ End Function )
89+
90+ Dim serversDatPath = Path.Combine(PageInstanceLeft.Instance.PathIndie, "servers.dat" )
91+
92+ Dim nbtData
93+ if Not File.Exists(serversDatPath) Then
94+ nbtData = New NbtList( "servers" , NbtTagType.Compound)
95+ Else
96+ nbtData = Await NbtFileHandler.ReadTagInNbtFileAsync( Of NbtList)(serversDatPath, "servers" )
97+ End If
8898 If nbtData IsNot Nothing Then
8999 Dim server = New NbtCompound()
90100 server( "name" ) = New NbtString( "name" , result.Name)
91101 server( "ip" ) = New NbtString( "ip" , result.Address)
92102 nbtData.Add(server)
93103 Dim clonedNbtData = CType (nbtData.Clone(), NbtList)
94- Await NbtFileHandler.WriteNbtFileAsync (clonedNbtData, Path.Combine(PageInstanceLeft.Instance.PathIndie, "servers.dat" ) )
104+ Await NbtFileHandler.WriteTagInNbtFileAsync (clonedNbtData, serversDatPath )
95105 End If
96106 End If
97107 End Sub
98108
99109 Public Shared Function GetServerInfo(server As MinecraftServerInfo) As (Name As String , Address As String , Success As Boolean )
100- Dim newName As String = MyMsgBoxInput( "编辑服务器信息" , "请输入新的服务器名称:" , server.Name)
110+ Dim newName As String = MyMsgBoxInput( "编辑服务器信息" , "请输入新的服务器名称:" , server.Name,
111+ New Collection( Of Validate) From { New ValidateNullOrWhiteSpace()})
112+
101113 If String .IsNullOrEmpty(newName) Then
102- Hint( "服务器名称不能为空" , HintType.Info)
103114 Return ( String .Empty, String .Empty, False )
104115 End If
105116
106- Dim newAddress As String = MyMsgBoxInput( "编辑服务器信息" , "请输入新的服务器地址:" , server.Address)
117+ Dim newAddress As String = MyMsgBoxInput( "编辑服务器信息" , "请输入新的服务器地址:" , server.Address,
118+ New Collection( Of Validate) From { New ValidateNullOrWhiteSpace()})
107119 If String .IsNullOrEmpty(newAddress) Then
108- Hint( "服务器地址不能为空" , HintType.Info)
109120 Return ( String .Empty, String .Empty, False )
110121 End If
111-
112122 Return (newName, newAddress, True )
113123 End Function
114124
@@ -123,7 +133,7 @@ Public Class PageInstanceServer
123133
124134 Try
125135 ' 读取NBT格式的servers.dat文件
126- Dim nbtData = await NbtFileHandler.ReadNbtFileAsync ( Of NbtList)(serversFile, "servers" )
136+ Dim nbtData = await NbtFileHandler.ReadTagInNbtFileAsync ( Of NbtList)(serversFile, "servers" )
127137 ParseServersFromNBT(nbtData)
128138 Catch ex As Exception
129139 Log(ex, "读取servers.dat文件失败" , LogLevel.Debug)
@@ -147,7 +157,7 @@ Public Class PageInstanceServer
147157 Dim name As String = If (server.Get( Of NbtString)( "name" )?.Value, "Unknown" )
148158 Dim iconBase64 As String = server.Get( Of NbtString)( "icon" )?.Value
149159
150- Log(vbCrLf & $"服务器 {i + 1}:" )
160+ Log( $"服务器 {i + 1}:" )
151161 Log( $" 名字: {name}" )
152162 Log( $" IP: {ip}" )
153163 ' Log($" Hidden: {If(hidden = 1, "Yes", "No")}")
@@ -211,13 +221,15 @@ Public Class PageInstanceServer
211221 ''' ping单个服务器
212222 ''' </summary>
213223 Public Async Shared Function PingServer(server As MinecraftServerInfo) As Task( of MinecraftServerInfo)
214- Dim addr = Await ServerAddressResolver.GetReachableAddressAsync(server.Address)
215-
216224 Try
217225 ' Ping服务器
226+ Dim addr = Await ServerAddressResolver.GetReachableAddressAsync(server.Address)
227+
218228 Using query = New McPing(addr.Ip, addr.Port)
219229 Dim result As McPingResult
230+ Log( "Pinging server: " & server.Address & ":" & addr.Port)
220231 result = Await query.PingAsync()
232+ Log( "Ping result: " & If (result IsNot Nothing , "Success" , "Failed" ))
221233 If result <> Nothing
222234 server.Status = ServerStatus.Online
223235 server.PlayerCount = result.Players.Online
@@ -240,8 +252,6 @@ Public Class PageInstanceServer
240252 Public Shared Sub RemoveServer(server As ServerCard)
241253 Dim index = GetServerIndex(server)
242254 ServerCardList.Remove(server)
243- Log( "index: " & index)
244- Log( "_serverList.Count: " & ServerList.Count)
245255 If index >= 0 AndAlso index < ServerList.Count Then
246256 ServerList.RemoveAt(index)
247257 End If
0 commit comments