2012-05-17 1 views
0

У меня есть обертка сервера, она в основном выводит результат с консоли и предоставляет дополнительные функции для minecraft.C# - Получить конкретный текст с вывода

На стороне игрока есть список игроков, я хочу, чтобы список показывал подключенных игроков.

Here is the output for a player Joining: 
2012-05-17 17:56:32 [INFO] name [/192.168.0.16:50719] logged in with entity id 1873 at ([world] -34.8881557254211, 63.0, 271.69999998807907) 

Output for player leaving: 
2012-05-17 17:58:03 [INFO] name lost connection: disconnect.quitting 

Как добавить игрока в список при присоединении и удалить при выходе?

Любая помощь будет большой, спасибо.

+0

Ive пытался spliting текст, но я не DonT много работы со строками в мимо. Это просто провалилось! –

+0

Почему существует IP-порт с порту, где должно быть имя пользователя? –

ответ

0

Немного Hacky, но это должно работать:

var input = "2012-05-17 17:56:32 [INFO] name [/192.168.0.16:50719] logged in with entity id 1873 at ([world] -34.8881557254211, 63.0, 271.69999998807907)"; 

var name = Regex.Matches(input, @"\]\s(.+?)\s")[0].Groups[1].Value; 
+0

Могут ли люди иметь пробелы в своих именах? –

+0

Нет, просто одно слово usernames –

+0

Тогда это сработает :) –

0

Больше частичного ответ:

Предполагая, что вы просто разбор консольного вывода и отвечать на сообщения соответственно - можно не только разобрать строка, чтобы увидеть, содержит ли она определенную фразу, например «вошел в систему» ​​и «отключиться»? Вы можете использовать регулярные выражения для получения необходимых токенов из строки для создания объекта из сообщений. Я предполагаю, что имя «имя» - это имя игрока - вам может и не понадобиться использовать регулярное выражение в этом случае - могут ли игроки иметь дубликаты имен на сервере minecraft?

Если нет, то вы должны иметь возможность использовать этот токен в качестве ключа для словаря, например.

Dictionary<string, playerObject> 

Таким образом, вы можете связать сообщения с объектом в списке, например.

псевдокод:

private void OnNewMessage(string message) 
{ 
    if(message.Contains("logged in")) 
    { 
     // Build player object 
     // some code here ... to parse the string 

     // Add to player dictionary 
     PlayerDict.Add(playerName, newPlayerObject); 
    } 
    else if(message.Contains("disconnect")) 
    { 
     // Find the player object by parsing the string 
     PlayerDict.Remove(playerName); 
    } 
} 

Можете ли вы дать немного больше информации о том, что вы получили до сих пор, и что технологии вы пишете это? Есть еще несколько соображений (поскольку у вас есть список в тегах, я предполагаю, что это winforms), такие как привязка, и в зависимости от используемой технологии метод может немного отличаться

+0

Спасибо за помощь, я не слишком уверен, как это использовать, но на самом деле я этого не сделал. Im немного noob для C# ive использовал VB.NET в течение многих лет. –

+0

Они одни и те же, насколько мне известно :) только разный синтаксис составляет около 98% различий! Вы хотите опубликовать свой код «получать сообщение»? Кроме того, используйте регулярное выражение Дейва Бикса, которое размещено в нем - используйте класс Regex (System.Text.Пространство имен RegularExpress) и передать строку в качестве входных данных, это должно вернуть имя пользователя – Charleh

+0

Да, им всего 15, я еще не все узнал, но я заметил подобный синтаксис, его просто .NET framework действительно –

0

Возможно, вам лучше хранить своих игроков в словаре (карта) а затем вы можете добавлять и удалять их по имени.

Чтобы записать имя, вы можете использовать регулярное выражение, или похоже, что вы, вероятно, можете взять подстроку, начиная с позиции имени, так как это выглядит согласованным.

string name = outputString.Substring(27)

Тогда можно разделить на пространстве и принять результат в положении 0.

name = name.Split(' ')[0];

+0

Объедините это с ответом Шарле и почти все, что вам нужно. – madeFromCode

+0

Да, предполагая, что формат сообщения не изменяется, это должно работать нормально - сохранение необходимости в любом регулярном выражении. – Charleh

 Смежные вопросы

  • Нет связанных вопросов^_^