Пример #1
0
        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);
        }
Пример #2
0
        /// <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);
        }