Я пишу программу чата для своего сетевого класса, и у меня все настройки сети отлично.
Моя проблема в том, что если клиент в данный момент пишет сообщение и получает сообщение от другого клиента, тогда его текущий ввод отображается вместе с полученным сообщением.
Например, если клиент пишет сообщение "Привет, как дела?" и получает сообщение "Добрый день!" в то время как в середине написания их сообщения оно отображается как:
Привет, добрый день!
-> а ты?
Где -> область, в которую пользователь вводит сообщение. Я хотел бы просто отобразить полученное сообщение и иметь область -> сохранить весь предыдущий текст, который был написан до получения сообщения.
Пожалуйста, обратите внимание, что то, что печатает клиент, все еще на самом деле "там", когда он получает сообщение. Если он завершит свое сообщение, его полное сообщение будет отправлено.
Также обратите внимание, что мой клиент использует pthreads. Один поток для чтения сообщений с сервера и отображения их на экране пользователя, и один поток для чтения со стандартного ввода и отправки сообщений на сервер. Я действительно считаю, что моя проблема возникает из-за того, что я использую pthreads и потоки используют один и тот же stdin, stdout, stderr. Может быть, это заблуждение и неправильно?
Надеюсь, я ясно понял свою проблему. Если нет, извините. Пожалуйста, дайте мне знать, что я могу уточнить для вас.
Я начал проводить исследования и наткнулся на следующие ссылки:
Я думал о попытке подняться вверх по линиям и перемещать курсоры и прочее, но не знаю, является ли это наиболее эффективным способом сделать это. Во-первых, потому что я не знаю, как перехватить информацию, которая находится в терминале, ожидая, когда он «введен» / отправлен на стандартный ввод. Может быть, я просто не узнал, как это сделать.
Также мне было интересно, есть ли способ работать / манипулировать файловыми дескрипторами для решения проблемы? Может быть, это даже не решит?
Спасибо за чтение и ваше время. Я ценю вашу помощь.