void SendEveryone(ServerSideUser sender, string message) { foreach (var user in users) { Send(user.stream, sender == null ? ReceiverType.Server_Everyone : ReceiverType.Client_Everyone, message); } }
void ProcessClient(object o) { TcpClient client = o as TcpClient; if (client is null) { return; } NetworkStream stream = client.GetStream(); byte[] data; RecieveResult res; ServerSideUser currUser = new ServerSideUser() { user = null, client = client, stream = stream, thread = Thread.CurrentThread }; users.Add(currUser); bool isRunning = true; do { while (!stream.CanRead) { Thread.Sleep(100); } res = Recieve(stream, out data); switch (res.receiverType) { case ReceiverType.Client_Server: switch (res.commandType) { case CommandType.Connect: currUser.user = ClientLib.User.Deserialize(data); SendEveryone(null, currUser.user.Name + " has connected!"); break; case CommandType.Exit: isRunning = false; users.Remove(currUser); SendEveryone(null, currUser.user.Name + " has left!"); break; } break; case ReceiverType.Client_Everyone: switch (res.commandType) { case CommandType.String: SendEveryoneUserData(currUser.user); SendEveryone(currUser, Encoding.UTF8.GetString(data, 0, data.Length)); break; case CommandType.RawData: break; } break; case ReceiverType.Client_GroupById: switch (res.commandType) { default: break; } break; } } while (isRunning); users.Remove(currUser); stream.Close(); client.Close(); }