Это действительно зависит от того, как сервер форматирует поступающие команды. Скажем, например, что они имеют форму "".
Первое, что я хотел бы сделать, это написать класс сокета, которыйобрабатывает чтение данных и вызывает событие (скажем, OnLine
) для каждой полученной «строки» (это всего лишь пример, я понятия не имею, в каком формате находятся ваша команда и сообщения).
Затем я реализовал бы класс, который имеет этот текстовый сокет в качестве члена, и подписался бы на событие полученной строки.Этот класс также будет иметь словарь делегатов, который сопоставляется с возможными командами, которые могут быть получены с сервера, например:
public class MyClient
{
private delegate void CommandHandler(string data);
private TextSocket socket_ = new TextSocket(); // text socket we created
private Dictionary<string, CommandHandler> cmdMap_ = new Dictionary<string, CommandHandler>();
public MyClient()
{
// Initialise our map full of delegates
cmdMap_["CMD1"] = (data) => { /* handle this command */ };
cmdMap_["CMD2"] = (data) => { /* handler for this one */ };
socket_.OnLineReceived += (line)
{
if(!string.IsNullOrEmpty(line)) // sanity check
{
string cmd;
string data;
int pos = line.IndexOf(' ');
if(pos != -1)
{
cmd = line.Substring(0, pos);
data = line.Substring(pos + 1);
}
else
cmd = line;
if(cmdMap_.ContainsKey(cmd))
cmdMap_[cmd](data);
}
};
}
}
Обратите внимание, я использовал здесь лямбды, но, конечно, не нужно.