Немного оффтоп, но может кому пригодится. Тулза для разработки своих или описания существующих протоколов. Для чего: - перенести проектирования с текстовых файликов в более или менее удобный для этого интерфейс - хранить документацию по протоколам в XML-формате Путей развития я вижу множество (генератор кода, генератор проектной документации), но скорее всего лень покроет их пылью. Если что-то действительно понадобиться - допишу. Если у кого-то появятся мысли по доработке тулзы, постараюсь найти время и реализовать их, но свободного времени мало. Также, доступны исходники, каждый может навернуть что-то своё, чего именно ему не хватает. Скачать можно отсюда: https://www.dropbox.com/s/nxnb4tfjjtasddb/ProtoBuilder.exe Исходники с github: https://github.com/perfectdev/ProtoBuilder
Ну и поскольку у нас тут форум больше связанный с анжеликой, по мне не помешал бы тип Octet: 代码: CUInt size; byte data[size]; Ну и отсюда вытекающие стандартыне ПВшные string и wstring, которые у меня через него и реализованы как 代码: public string ReadString() { return Encoding.ASCII.GetString(this.ReadOctet()); } public string ReadWString() { return Encoding.Unicode.GetString(this.ReadOctet()); } public byte[] ReadOctet() { return this.ReadBytes(this.ReadCUInt()); } PS Добавь кстати в скайп)
Добавлена поддержка динамического размера сегмента. Для этого пришлось завести Segment.ID в формате GUID. Сегменты, доступные в качестве определителя размера определяются в следующем методе (ProtoBuilder/Model/Packet.cs) PHP: // Возвращает коллекцию подходящих для определения размера сегментовpublic List<Segment> DynamicSizeSegments { get { return Segments.Where( segment => segment.Type.Type == DataType.Byte || segment.Type.Type == DataType.Int16 || segment.Type.Type == DataType.Int32 || segment.Type.Type == DataType.Int64 || segment.Type.Type == DataType.UInt16 || segment.Type.Type == DataType.UInt32 || segment.Type.Type == DataType.UInt64).ToList(); }} Сегменты, которым можно установить динамический размер определяются в методе (ProtoBuilder/Model/Segment.cs) PHP: public Visibility IsDynamicSize { get { return Type.Type == DataType.Bytes || Type.Type == DataType.String ? Visibility.Visible : Visibility.Collapsed; }} Добавил типы float и decimal - public enum DataType { Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Double, DateTime, String, Bytes} + public enum DataType { Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Double, DateTime, String, Bytes, Float, Decimal}