• Made redox into a more formal package with CMake. It now by default
    builds a dynamic library in release mode. Tests and examples can be
    enabled with options. Added semantic versioning. Documented the install
    from source procedure which is very easy, just make and make install.
    
    Users now have to just link one library (redox) and include one header
    (redox.hpp), and the rest is linked from those.
    
    Used CPack to add capability to create a debian package. Useful for
    getting it into the apt repos.
    
    Also redid the readme introduction.
    Hayk Martirosyan authored
     
    Browse Code »
  • More intuitive if disconnect() blocks like connect(). Most clients will
    want to use these two methods. For more fine grained control,
    disconnect() is just a combo of stop() and wait().
    Hayk Martirosyan authored
     
    Browse Code »
  • Configure CMake to generate libredox.so and libredox_static.a, and have
    all examples use the dynamic library. This is how Redox should be used
    in practice, and greatly reduces the compilation time of the examples.
    
    Also renamed redox.[ch]pp to client.[ch]pp and created one master header
    redox.hpp for users to include. This header right now just includes
    client.hpp, command.hpp, and subscriber.hpp.
    Hayk Martirosyan authored
     
    Browse Code »
  • Make .free() on commands send a message over an async watcher to the
    event loop, just like adding commands. This gets rid of some very tough
    to find memory bugs. Combined .cancel() with .free(), so there is only
    one method to call, whether for synchronous commands or for looped
    commands.
    
    Also debug some horrible segfaults related to Subscriber. Something is
    odd with hiredis and subscriptions, need to ask them. It seems when we
    flood with commands it doesn't disconnect cleanly. Look for a way to
    wait until all commands are processed.
    Hayk Martirosyan authored
     
    Browse Code »


  • Split up command into command, command_blocking, and command_looping.
    The original command no longer returns anything, which clarifies how it
    should be used in most cases. command_looping and command_blocking both
    return a command object.
    
    Also added a waiting CV to the Command object, though it is not used in
    command_blocking yet.
    Hayk Martirosyan authored
     
    Browse Code »
  • Now, there is only one callback for command(), and it returns a const
    reference to the Command object. The user is responsible for error
    checking using c.ok(), c.status(), and getting the reply with c.reply().
    This significantly cleans up the library code and the user code.
    
    Greatly refactored the data type specialization code in command.cpp.
    Hayk Martirosyan authored
     
    Browse Code »



  • utils/logger.[ch]pp gives a logger implementation based on ostringstream
    that is pretty nice. I took this from Stack Overflow and added some
    things to make syntax nicer. Changed all cout and cerr statements in
    Redox to be of the form logger.{debug/info/warning/error/fatal}() <<
    stuff. Arguments for non-printed statements are still evaluated. Gives a
    performance hit if we actually add statements on every callback and run
    speed tests. For most use cases, doesn't matter. For now, not including
    such low level output anyway. Would be nice to have a macro to leave
    out/include the low-level logs at compile-time.
    Hayk Martirosyan authored
     
    Browse Code »
  • Hayk Martirosyan authored
     
    Browse Code »
  • Implemented limited but useful binary data support without breaking the
    API. If the last character of the command is a ", look for the first ",
    and everything in between the quotes treat as binary data. Takes care of
    setting a key with a binary value. Not useful if there need to be
    multiple binary entries in one command, or for binary keys. Also need to
    be careful if the last character of the value actually needs to be a
    quote, in which case we need to quote the value.
    Hayk Martirosyan authored
     
    Browse Code »


  • Consolidated user callbacks into one, improved some logic.
    Hayk Martirosyan authored
     
    Browse Code »
  • Created an atomic_int connect_state that keeps track of not yet
    connected, connected, disconnected, and errors. Used to implement good
    error behavior when the server is down and you start() a Redox instance,
    or when the server goes down in the middle of running commands. Now,
    nothing should hang, but should return errors (or throw exceptions) when
    the server goes down.
    
    Also added hooks for a user connect/disconnect callback in the
    constructor, which is helpful for client programs.
    
    Added an example with three Redox clients in one thread.
    Hayk Martirosyan authored
     
    Browse Code »