uLobby

1.2.3 Werecat (2014-01-17)

Improvements:
  • Added authorative closing of peer connections using the Lobby.CloseConnection method.
  • Optimized low level message parsing and handling.
  • Added informative warning messages when attempting to uninitialize security for connections whose security is in the process of being initialized.
  • Added informative exception when attempting to initialize or uninitialize security for the lobby peer.
Changes:
  • When attempting to log in to an account, the password will now always be verified before checking whether the user is already online. If the user is already online but the password was wrong, the operation will fail with the AccountError.InvalidPassword error instead of AccountError.AlreadyLoggedIn.
  • Lobby.IsPeerConnected now returns true when called with the lobby peer as argument.
  • uLobby 1.2.3 is NOT network compatible with uLobby 1.2.2 or older, because of fixes in the connection handshake protocol. This means a game client or game server running 1.2.3 can only connect to a lobby server running 1.2.3, and vice versa.
Fixes:
  • Fixed issue that could cause multiple users to log in to the same user account if the login attempts were made in rapid succession.
  • Fixed possible DoS vulnerabilites that would be caused by sending specially crafted bad packets.
  • Fixed handling of encrypted messages received in the lobby server while disabling security for a peer.

1.2.2 Werecat (2013-04-03)

Improvements:
  • Added support for updating account information. Use the new UpdateAccount method in the account manager to update the password or the data of an account.
  • Accounts can now be registered using a string password and data as an object array lobby-side.
  • Added support for selecting which local network interface to use for lobby network communication, using the Lobby.config.localIP field.
  • Server registry events are now also called lobby-side.
  • Clarified confusing error message that would be printed when an exception is thrown during the execution of an RPC method.
Changes:
  • The LobbyConnectionStatus.Disconnecting connection status is no longer used when the connection gets unexpectedly disconnected. It can now only result after a local call to Lobby.Disconnect. If the connection gets disconnected for any other reason (such as a timeout or that the other side disconnected) the connection status will change immediately from Connected to Disconnected, and the Lobby.OnDisconnected event will be raised. This gives a cleaner API that is easier for user code to handle.
  • The local endpoint retrieved by the Lobby.peer.endpoint property now reflects the endpoint chosen using the Lobby.config.localIP field. If this field is left unchanged, the local endpoint will now have the address 0.0.0.0 instead of 127.0.0.1.
  • Removed exception throwing for some error conditions when sending RPCs and replaced them with informational messages in the log, to allow more flexibility in the code.
  • The client DLL has been moved into a separate directory and renamed from uLobbyClient to simply uLobby. A file ReadMe.txt in the same directory has been added that describes how to use it.
Fixes:
  • Fixed exception that would result when trying to register an account on an iOS device if stripping was enabled when building. The link.xml file has been updated to solve this problem.
  • Fixed problems that would cause exceptions to be thrown when sending RPCs to a peer that is in the process of disconnecting.
  • Fixed issue that would cause packets to be dropped when running over a virtual private network.

1.2.1 Werecat (2012-09-21)

Improvements:
  • Added support for configuring various parameters of the lobby network. The new Lobby.config property can be used for controlling how often connections are pinged and how long it takes for them to time out, how many connection reattempts should be made and how often, and the maximum size of UDP packets.
Changes:
  • When closing the Unity application normally, the local peer will disconnect gracefully instead of immediately closing the socket. This brings back the behaviour of uLobby versions prior to 1.2.0.
  • Changed the default disconnect timeout from 1 second to 0.2 seconds.
Fixes:
  • Fixed issue where the lobby would incorrectly complain that a password was invalid when a previously registered account was logged into.
  • Fixed issue where the server registry would send multiple identical updates when a server connected or disconnected.

1.2.0 Werecat (2012-09-10)

Improvements:
  • Added encryption support, allowing the connection to the lobby to be secured using encryption algorithms based on a public-private key scheme. The API mimics uLink's encryption API, with the main methods being Lobby.InitializeSecurity and Lobby.UninitializeSecurity. The private and public keys are set using Lobby.privateKey and Lobby.publicKey.
  • Added support for specifying RPC flags for customising how RPCs are sent. Some Lobby.RPC method overloads now accept a parameter of type LobbyMessageFlags that contains the RPC flags. This allows for optimising the communication by specifying that an RPC is to be sent unreliably, unencrypted, or type unsafe.
  • Added new statistics API that allows for monitoring the activity in the lobby, such as what operations are being performed, how many packets are sent per second, or how many database writes have been made. This API is accessible through a nestled Statistics class in each of Lobby, ServerRegistry, AccountManager and FriendManager.
  • Separated the notions of peer type and the status of the connection. Peers now get their peer type immediately upon calling one of the connect methods, and retain it until they are disconnected. The LobbyPeerType.Connecting enum value is therefore obsolete. The new enum LobbyConnectionStatus and property Lobby.connectionStatus are now used for representing the status of the connection (i.e. whether it is connected, connecting, disconnected or disconnecting), while Lobby.peerType only represents whether the peer is a lobby instance, server or client (or, if none, disconnected).
  • Added optional timeout to Lobby.Disconnect to allow for specifying for how long the connection will linger before closing.
  • Added DisconnectImmediate method in Lobby that immediately closes the network socket.
  • Added optional argument to FriendManager.Master.GetFriendList for specifying whether to verify that the specified account exists before continuing with the operation. The default value is true.
Changes:
  • The meaning of the properties isLobby, isServer and isClient in the Lobby class has changed as a consequence of the new connection status API. These properties now return true while connecting or disconnecting (if the peer type is correct), whereas previously they would return false in this case. In order to retain the previous behaviour you can replace expressions such as Lobby.isClient with Lobby.isClient && Lobby.isConnected.
  • The GetAccount method in AccountManager.Master now fails with an exception if the specified account was invalid or does not exist, instead of returning null as the request result. A new method TryGetAccount has been added that has the old behaviour.
  • To make more clear its general responsibility and to reduce typing, FriendListManager is now called simply FriendManager. The old name can still be used but is marked as obsolete.
  • Renamed FriendListException to FriendException. The old name can still be used but is marked as obsolete.
  • Renamed FriendListError to FriendError. The old name is no longer available.
  • LobbyPeerType.Connecting is now marked as obsolete, and no peer will ever have this peer type. Use LobbyConnectionStatus.Connecting instead.
  • The Lobby.RPC method overloads that take a list of RPC targets now use IEnumerable as the type of the list instead of IList.
Fixes:
  • FriendManager.Master.GetFriendList now fails with an exception if the specified account was invalid or does not exist, instead of returning an empty friend list.
  • Numerous enhancements to the stability regarding connecting and disconnecting.
Extras:
  • Added new client-side DLL that only includes code usable by clients. This DLL is smaller than the standard DLL and does not depend on uGameDB, helping to minimise the size of deployed applications. It is included in the Plugins/uLobby/Extras folder in the uLobby package with the name uLobbyClient (without file extension, to prevent Unity from building it together with the standard DLL). To use it, rename it to end with ".dll" and remove the original DLL, Plugins/uLobby/Assembly/uLobby.dll.
  • Added link.xml file in the uLobby package, located in the Plugins/uLobby/Extras folder. This file can be used when stripping has been enabled, in order to prevent Unity from stripping away code used by uLobby. To use it, place it directly under the Assets folder (possibly merging it with any existing link.xml file).