public static ValveIpcServerEntry Parse(Stream stream) { var reader = new BinaryReader(stream); var entry = new ValveIpcServerEntry { Name = reader.ReadNullTerminatedString(), Guid = new Guid(reader.ReadBytes(16)) }; // Null name or UUID means terminator if (string.IsNullOrWhiteSpace(entry.Name) || entry.Guid.Equals(new Guid())) { return(null); } return(entry); }
/// <summary> /// Reads the memory-mapped file to discover servers. /// </summary> public IEnumerable <ValveIpcServerEntry> DiscoverServers() { _mutex.WaitOne(); var list = new List <ValveIpcServerEntry>(); using (var stream = _ipcFile.CreateViewStream()) { do { var entry = ValveIpcServerEntry.Parse(stream); if (entry == null) { break; } list.Add(entry); } while (stream.Position < stream.Length); } _mutex.ReleaseMutex(); return(list); }