Многопользовательский чат на socket. Не обновляется список пользователей - C#
Формулировка задачи:
пишу многопользовательский чат на socket (уже написал с wcf и он работает). сообщения обмениваются но список клиентов обновляется только у первого и у последнего а у остальных не обновляется. посмотрите пожалуйста где я ошибся или я все не правильно делаю?
код обновления списка клиентов
метод отправки
здесь в клиенте обновляю список клиентов
прикрепил проект
ChatSocket.rar
private void UpdateUsers(Socket sock)
{
List<byte> bytes = new List<byte>();
bytes.AddRange(BitConverter.GetBytes((int)Commands.UpdateUsers));
bytes.AddRange(BitConverter.GetBytes(clients.Count));
foreach (var item in clients)
{
byte[] b = Encoding.UTF8.GetBytes(item.Key);
bytes.AddRange(BitConverter.GetBytes(b.Length));
bytes.AddRange(b);
}
if (sock == null)
foreach (var item in clients)
{
Send(item.Value, bytes);
}
else
Send(sock, bytes);
}private void Send(Socket socket, List<byte> bytes)
{
byte[] b = BitConverter.GetBytes(bytes.Count);
bytes.InsertRange(0, b);
socket.Send(bytes.ToArray());
}private void UpdateUsers(byte[] bytes)
{
int pos = 4;
int count = BitConverter.ToInt32(bytes, pos); pos += 4;
List<string> users = new List<string>();
for (int i = 0; i < count; i++)
{
int ln = BitConverter.ToInt32(bytes, pos); pos += 4;
string name = Encoding.UTF8.GetString(bytes, pos, ln); pos += ln;
users.Add(name);
}
var handler = Interlocked.CompareExchange(ref this.UpdateUsersList, null, null);
if (handler != null)
{
handler(this, new ChatArgs(true, users));
}
}Решение задачи: «Многопользовательский чат на socket. Не обновляется список пользователей»
textual
Листинг программы
reader["SkoT"].ReadLine();
sWriter["SkoT"].WriteLine("Бла бла бла");