- fixed callbacks sometimes not called in case of errors or timeouts
- fixed a crash when the contacted wss:// server was replying with HTTP:// responses. This could happen if the service provider injects responses to inform the user about insufficient founds.
- fixed a compile error on Marmalade/Windows
- Implement implement token clearing and logout
- fixed a bug that caused IsAuthenticated() and IsAvailable() to always return false
- implemented GetDeviceId() for iOS, Android, OSX and Windows. Details documented at IGSPlatform.h iGSPlatform::GetDeviceId()
- note: there are separate implementations for Marmalade and Unreal that use the device-id provided by the engines
- re-compiled OpenSSL 1.0.2d for android, iOS and OSX
- extended compatibility with the iOS Simulator
- renamed the "GS_" class to "GS". There's a typedef, so that your code still compiles, but it's marked deprecated and will be removed in future versions.
- reanmed the "Optional_" template class to "Optional"
- changed the return type of GSTypedRequest::Send() to void, because it's interface was suggesting, that the SDK supports blocking calls
- renamed samples and tests so that it's easier to get the working on iOS
- implemented tests for GetDeviceId()
- implemented tests for socket disconnects
- fixed warnings
- The SDK Sources are now included in the Plugin. This enables better deployment and easier debugging.
- fixed warnings
- fixed an unitialized valiable (GS_::GameSparksAuthenticated) when SDK was compiled without support for std::function<>
- Fix OS X build remove unused blueprints from GameSparksSample
- Wrap with AllowWindowsPlatformTypes and HideWindowsPlatformTypes in GameSparksUnrealPlatform and GameSparksModule.h Remove warnings regarding FPostConstructInitializeProperties in request constructors
- Fix incorrect boolean HasErrors in response events
- Add BP Node access to response errors as GameSparksScriptData
- Add Get/Set Float and FloatList in GameSparksScriptData
- JSONString property on GameSparksScriptData for debugging
- Remove some unused classes from previous SDK version
- support for durable requests
- GS_ now has GetDurableQueue
- added HasCalbacks and SetCallbacks to GSRequest. If you're using durable requests, make sure to re-attach your callbacks via OnPersistentQueueLoadedCallback
- fixed a missing return in WebSocket error handling
- request and response objects now have HasUserData and GetUserData respectively SetUserData - User data also needs to be re-attached via OnPersistentQueueLoadedCallback, because it is a void* and will not be persisted
- fixed message callbacks
- IGSPlatform now has LoadValue and StoreValue so that the SDK can store persistent data.
- We have implementations for Windows / OS X / iOS / Android / Marmalade in the base class
- If you need to customize the behaviour, you can either override gsstl::string ToWritableLocation(gsstl::string desired_name) and/or IGSPlatform::StoreValue() IGSPlatform::LoadValue()
- format of request-ids now match the ones from the .NET SDK
- updated openssl binaries for iOS
- the samples and tests now also run in the iOS simulator
- If you want to run the samples on a device, you might have to change PRODUCT_NAME and the provisioning profile in the Xcode settings
- Blueprint support!
- works with UE 4.7 and 4.8
- documentation tweaks
- added documentation for compile options
- compile option USE_CYASSL (enabled by default on Marmalade)
- The SDK now works with OpenSSL and CYA_SSL
- Request id's now start at zero
- fixed a possible crash when a web-socket is closed
- increaed minimum required CMake version (fixes error about target_include_directories)
- edits in documentation
- added qick start guide
- added documentation (execute docs/make.py for a preview)
- fixed a bug that caused update calls to connection to skipped
- fixed DeviceAuthenticationRequest (the getters and setters where missing)
- made some not yet implemented methods private
- also building libs for the iOS-Simmulator (x86 and x64)
- fixed a crash on disconnect
- added hint about wrong credentials if connecting fails
- fixed timing logic for backing off and timeouts
- fixed looking up with the wrong key in the auto-generated code
- fixed cleanup if a GS_-object goes out of scope
- It's now possible to send the same GSRequest twice
- better socket-error handling
- fixed leaking the platform-object in the samples
- fixed the live-service URL
- minor cleanups
- fixed a bug that caused the creation of invalid JSON-Objects (keys where added multiple times instead of replaced)
- fixed samples to pass the correct time units (seconds) to update()
- if the connection fails, the SDK now backs off for five seconds
- fixed a crash when a websocket timed out
- fixed a crash that occured if the websocket was destructed after a failed DNS-Lookup attempt
- added a stress-test sample
- added some tests
- improved continious integration (building for more platforms, running tests, etc.)
- removed cocos 2d from the repository
- added instruction on how to build the cocos sample
- added build-scripts to download cocos and build the sample
- added on-screen loggin to the cocos sample
- sample project now also supports the iOS-simmulator
- fixed error handling in websocket-code
- fixed cleanup in websocket code
- fixed samples to pass seconds to update()
- fixed a compile error in GSPlatformDeduction.h
- Added support for Marmalade
- Changed SSL-Method to TLS1
- Fixed all memory leaks
- Interface Changes:
-
The global GameSparks::Core::GS instance has been removed. If you find it convinient to have a global GS instance, you're still free to create one yourself.
-
GameSparks::Core::GS::GameSparksAvailable(bool available) => GameSparks::Core::GS::GameSparksAvailable(GameSparks::Core::GS/ gsInstance, bool available) The callback gets the current GS-instance passed as the first argument
-
GameSparks::Api::Requests::*Request: constructor now expects a GS-instance as the first argument
-
The callbacks passed to request.Send() now expect a GS-instance as their first argument
-
The method to register message handlers has changed: you used to write: GameSparks::Api::Messages::*Message::SetListener(MyListener); now you write: GS.SetMessageListerner(MyMessageListener). You can register one MessageListener for each message-type. Also MyMessageListener gets the GS-instance passed as the first argument.
An example:
-
using namespace GameSparks::Api::Messages;
/* OLD */
void OnAchievementEarnedMessage(const AchievementEarnedMessage& message)
{
// do stuff with message
}
…
AchievementEarnedMessage::SetListener(OnAchievementEarnedMessage);
/* NEW */
void OnAchievementEarnedMessage(GameSparks::Core::GS_& gsInstance, const AchievementEarnedMessage& message)
{
// do stuff with message
}
…
// Message-type deduction works for c-style callbacks
GS.SetMessageListener(OnAchievementEarnedMessage);
/* If you want to better document the the message type the handler is registered for or you're using c++11, you can also write: */
GS.SetMessageListener<AchievementEarnedMessage>(OnAchievementEarnedMessage)
/* C++11 lambdas also work, if your compiler and standard library supports it: */
GS.SetMessageListener<AchievementEarnedMessage>([](GameSparks::Core::GS_& gsInstance, const AchievementEarnedMessage& message){
// do stuff with message
});
These changes where necessary for the leak-free shutdown of the SDK.
- Initial C++ SDK with support for plain C++, Unreal and Cocos2d-x