Environs version has been released which is a small maintenance release:

  • * Fixed: Network interface detection on windows platforms
  • * Updated: ClearMessages / ClearStorage using async flag of DeviceInstance objects

Have a look at the CHANGELOG.md for an exhaustive list of changes.

Environs version 0.9.5 has been released which focus low memory footprint of native and platform layers. The most important changes are:

  • * Updated: Notification loop handling in platform layers
  • * Changed: Removed NewStringUTF from Android layer with externally originating strings. NewStringUTF crashes unrecoverable on some devices and on some not …
  • * Added: SetMessagesSubscription/GetMessagesSubscription to Mediator layer
  • * Added: SetMediatorNotificationSubscription/GetMediatorNotificationSubscription to Mediator layer
  • * Added: Size check in TcpListener/BulkListener of DeviceBase before refactoring the heap located receive buffer
  • * Updated: BitmapFactory.decodeByteArray for Android ChatApp (creates high cpu load which never drops)
  • * Added: ERR_remove_state to cleanup crypto resources on error
  • * Added: ENABLE_DONT_LINGER_SOCKETS to native layer
  • * Updated: Threading in Android layer DeviceList/DeviceInstance updates/notifications
  • * Updated: Handling of spare sockets in MediatorDaemon
  • * Added: PreDispose and PrepareRemovalOfAllDevices to native layer (Cancel all device activities in advance before we actually wait for them to finish one after another)
  • * Updated: iOSX ARC disposal of DeviceInstance
  • * Updated: DeviceInstance update notification control using static flag (DeviceInstance.notifyPropertyChangedDefault)
  • * Updated: CPP API / CLI layer to provide non-UI device lists

Have a look at the CHANGELOG.md for an exhaustive list of changes.

With the release of version 0.9.1, Environs underwent major changes again mainly gets reflected through changed names for windows dlls:

  • The windows .NET layer dropped the C# code and moved to CPP/CLI in order to use the same code as for the CPP API
  • Added SetIsUIAdapter to DeviceList. If true, then all list modifications are dispatched to the UI thread. This option is set to true automatically depending on the initialization of a DeviceList object. Client code may set this option appropriately at any time.
  • Threading in platform layer has been improved to use worker threads and queues for notifications, list updates, etc.
  • Notification handling in platform layer has been improved.
  • Communication with Mediator services has been optimized.
  • Support for Surface 1 tabletop SDK has been dropped.

Overall, there are only three code bases for the thin platform layer in C++, Objective-C and Java. The C++ native core layer can be compiled for all platforms, e.g. Windows native, Windows .Net (C++/Cli), Linux, OSX, or iOS.

With the release of version 0.9.0, Environs underwent major changes which provide:

  • Change static API to object API which allows multiple instances of Environs objects to manage multiple application areas as the same time
  • CPP API which provides an object oriented interface for pure c++ projects (requires c++11)
  • Provide support and solutions for Visual Studio 2015
  • There are much more features and changes under the hood. However, as long as you made use of the Object API, there’s no need to update the code further.
  • With release 0.9.0, the RAW API of Environs got a new parameter to indicate a particular instance. The implementation of the Object API shows how to obtain and maintain instance handles.

The CPP API provides interface objects and enables the use of different c-runtimes at client code and framework code. This feature makes use of c++11 smart pointers to maintain memory allocation and disposal “at the right runtime side”.

We provide two simple examples (WindowsWin32, ChatApp.CPP) for the Windows platform which show how to use Environs from pure c++ client code. You may statically link against the framework library or use the object loader provided in Environs.Loader.cpp. The latter dynamically loads the framework library at runtime, creates an Environs object, and returns a smart pointer to the object interface. Client code therefore does not need to care about releasing memory or resources allocated for the object. Both features also provide the benefit that client code may use an arbitrary c-runtime (CRT) without having to care about the c-runtime of the framework library.

For iOS and OSX platforms, you may choose between the Objective-C or the CPP API. In order to show this, we provided CPP API examples in addition to the Objective-C examples in the iOSX folder.

The Objective-C API is actually a thin wrapper around the CPP API and connects the ARC (Automatic Reference Counting) of iOS/OSX projects with the object lifecycle management of the CPP API.

The tutorials and documentation will be updated soon to reflect the API changes.