public void Send(string message)
{
if (_stream == null)
{
Log.Warn("Соединение не установлено.");
return;
}
_sending = true;
byte[] buffer = Encoding.UTF8.GetBytes(message);
_stream.Write(buffer, 0, buffer.Length);
_stream.Flush();
_sending = false;
}
private void ConnectToServer()
{
Log.Info("Попытка подключения...");
try
{
_client = new TcpClient(_host, _port);
_stream = _client.GetStream();
Log.Info("Соединение установлено.");
StartListening();
}
catch (SocketException ex)
{
Log.Warn("Ошибка соединения: " + ex.Message);
_reconnectTimer = new Timer(Reconnect, null, 2000, Timeout.Infinite);
}
}
private void Reconnect(object state)
{
Log.Info("Переподключение...");
_reconnectTimer.Change(Timeout.Infinite, Timeout.Infinite);
ConnectToServer();
}
private void StartListening()
{
Thread listeningThread = new Thread(Listen);
listeningThread.Start();
}
private void Listen()
{
byte[] buffer = new byte[1024];
while (true)
{
if (!_sending)
{
try
{
int bytesRead = _stream.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
OnReceived?.Invoke(this, message);
}
}
catch (Exception ex)
{
Log.Warn("Ошибка при чтении потока: " + ex.Message);
ConnectToServer();
break;
}
}
}
}
Я пишу плагин для игры на Unity для логирования и исполнения команд удаленно.
Этот код - часть класса для работы плагина с ботом. При отправке запроса ботом в плагин проблем нет, команда исполняется, а при попытке отправить данные из плагина, то они не доходят. Да и еще, при перезагрузке сервера (перезагрузке, а не отключении), при отключении плагина последнее сообщение доходит до бота. Я без понятия почему такое происходит..