Пишу редактор кода на Windows Forms с возможностью следить за процессом написания с других компьютеров. Когда клиент(писатель) пишет, каждое изменение отправляется на сервер, а с сервера остальным клиентам(рецензентам). Клиент рецензента может отправлять некоторые запрос на сервер, а сервер отсылает ответ. В то же время, сервер постоянно шлёт данные об изменениях рецензентам. Он запускается в отдельной нити как только мы начинаем наблюдение за писателем. Пока я не начинаю наблюдение, я могу отправить любой другой запрос на сервер. Как только начинается наблюдение - начинаются ошибки. В чём проблема - всё это делается через один NetworkStream. Но я не знаю как сделать по-другому, чтобы изменения улавливались как только так сразу и одновременно чтобы можно было отсылать другие запросы на сервер. Может сделать ещё один поток NetworkStream? Подскажите как грамотно разрешить проблему. Вот код всей формы:
Вот функция захвата изменений, которая работает в отдельной нити после начала наблюдения:
public void CatchChanges()
{
while (true)
{
try
{
byte[] bytes = new byte[64]; // буфер для получаемых данных
StringBuilder builder = new StringBuilder();
int count = 0;
do
{
count = stream.Read(bytes, 0, bytes.Length);
builder.Append(Encoding.UTF8.GetString(bytes, 0, count));
}
while (stream.DataAvailable);
Program.mainReviewerForm.WriteTextSafe(builder.ToString());
}
catch (Exception e)
{
}
}
}
Функции которые вызываются при обычных запросах к серверу:
private int Send(string data) {
byte[] bytes = Encoding.UTF8.GetBytes(data);
int count = data.Length;
stream.Write(bytes, 0, data.Length);
return 0;
}
public string AcceptResponse()
{
try
{
byte[] bytes = new byte[64]; // буфер для получаемых данных
StringBuilder builder = new StringBuilder();
int count = 0;
do
{
count = stream.Read(bytes, 0, bytes.Length);
builder.Append(Encoding.UTF8.GetString(bytes, 0, count));
}
while (stream.DataAvailable);
string response = builder.ToString();
return response;
}
catch (Exception e) {
return e.Message;
}
}
Вот функция загрузки формы. В конце запускается нить на приём изменений.
private void ReviewerForm_Load(object sender, EventArgs e)
{
string response = reviewer.Connect();
if (reviewer.IsConnected() == true)
{
string chosenWriter = ChoseWriter();
string writerData = reviewer.StartWatching(chosenWriter);
if (writerData != OperationResult.noConnectedWriters)
{
if (writerData == OperationResult.success)
{
richTextBox1.Text = "";
}
else
{
richTextBox1.Text = writerData;
}
}
else
{
MessageBox.Show(OperationResult.noConnectedWriters, "Ошибка");
return;
}
}
else
{
MessageBox.Show(OperationResult.couldNotConnect, "Ошибка");
return;
}
ReviewerRequest rr = new ReviewerRequest();
rr.stream = reviewer.GetStream();
accept = new Thread(rr.CatchChanges);
accept.Start();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Разворачиваю бекап сайта на локалке (опен сервер), в фале settingsphp и dbconn
Делаю вывод даты с текстовым месяцемОт даты отнимается несколько дней
Проблема такая: скрипт стучится к неправильному IP слишком долго (>30s)
Есть форма отправки с полями имени фамилией email и телефонаНужно реализовать проверку номера телефона с помощью смс кода