1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

ProtoBuilder

Тема в разделе 'Soft (не относящийся к определенной игре)', создана пользователем pdev, 19 апр 2013.

  1. TopicStarter Overlay

    pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.408
    Лайки:
    1.405
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Немного оффтоп, но может кому пригодится.
    Тулза для разработки своих или описания существующих протоколов.
    Для чего:
    - перенести проектирования с текстовых файликов в более или менее удобный для этого интерфейс
    - хранить документацию по протоколам в XML-формате
    Путей развития я вижу множество (генератор кода, генератор проектной документации), но скорее всего лень покроет их пылью.
    Если что-то действительно понадобиться - допишу. Если у кого-то появятся мысли по доработке тулзы, постараюсь найти время и реализовать их, но свободного времени мало.
    Также, доступны исходники, каждый может навернуть что-то своё, чего именно ему не хватает.
    [​IMG]

    Скачать можно отсюда: https://www.dropbox.com/s/nxnb4tfjjtasddb/ProtoBuilder.exe
    Исходники с github: https://github.com/perfectdev/ProtoBuilder

    nikes, Evgeniy, nom1nal и 3 другим нравится это.
  2. Gibat Команда форума Администратор Программист Пользователи

    Сообщения:
    135
    Лайки:
    163
    Пол:
    Мужской
    Репутация:
    0
    Как я понял, нельзя делать конструкции вида: length int32, data[length] byte?
    pdev нравится это.
  3. TopicStarter Overlay

    pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.408
    Лайки:
    1.405
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Кстати, да. Столкнулся уже)
    Добавлю такую возможность.
  4. StAlKeR7779 Модератор Команда форума Модератор Программист Пользователи

    Сообщения:
    31
    Лайки:
    3
    Пол:
    Мужской
    Репутация:
    0
    Команда:
    angelemu
    Ну и поскольку у нас тут форум больше связанный с анжеликой, по мне не помешал бы тип 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 Добавь кстати в скайп)
  5. TopicStarter Overlay

    pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.408
    Лайки:
    1.405
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Добавлена поддержка динамического размера сегмента.
    Для этого пришлось завести Segment.ID в формате GUID.
    Сегменты, доступные в качестве определителя размера определяются в следующем методе (ProtoBuilder/Model/Packet.cs)
    PHP:
    //  Возвращает коллекцию подходящих для определения размера сегментов
    public List<SegmentDynamicSizeSegments {
        
    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}
  6. Evgeniy Пользователи

    Сообщения:
    113
    Лайки:
    120
    Репутация:
    0
    Команда:
    Ratio club
    le/be где то реализовано? Среди типов не увидел упоминаний
    pdev нравится это.
  7. TopicStarter Overlay

    pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.408
    Лайки:
    1.405
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Добавил свойство сегмента IsLittleEndian
    [​IMG]
    mr.Slink нравится это.
Черновик сохранён Черновик удалён

Поделиться этой страницей