Author Topic: Latest Version: 3.1.0 (September 22, 2017)  (Read 26517 times)

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 2.0.5 (April 2nd, 2015)
« Reply #30 on: May 07, 2015, 10:40:33 PM »
2.0.6
- NEW: Added a new integer type that isn't stored as a plain integer in memory (guard against CheatEngine).
- FIX: Calling Disconnect() will now always ensure that the OnNetworkLeaveChannel gets called before OnNetworkDisconnect.
- FIX: Optimizations related to memory allocation, greatly reducing TNet's impact on GC.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 2.0.6 (May 7th, 2015)
« Reply #31 on: June 07, 2015, 03:45:07 PM »
2.1.0
- NEW: Users can now authenticate as administrators for additional functionality. Some requests now require admin authentication.
- NEW: Added Server Options -- a persistent DataNode stored alongside the server save (TNManager.SetServerOption, TNManager.GetServerOption).
- NEW: It's now possible to lock channels, preventing further modification.
- NEW: The log is now more robust, and a copy of all errors is now saved separately.
- NEW: Added aliases to all players. Use them to add identification to players, such as User/Steam IDs.
- NEW: Added kick and ban functionality for administrators.
- NEW: Added spam detection for server-wide broadcasts.
- NEW: Added a way to get a list of files in a remote directory (TNGameClient.GetFiles).
- NEW: Stand-alone server can now parse DataNode.
- FIX: Fixed rare data corruption that would sometimes occur with high number of players and large packets.
- FIX: Stand-alone server should now use a lot less memory.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 2.1.0b (June 11th, 2015)
« Reply #32 on: August 14, 2015, 11:46:33 AM »
2.1.1
- NEW: DataNode now has limited Game Object serialization functionality. All MonoBehaviour script properties can be serialized, as well as common Unity types: collider, rigidbody, mesh, renderer. Optimal use: saving entire game objects into an easy to read/modify text format on disk.
- NEW: DataNode.Instantiate has been added to create a new game object serialized via DataNode.
- NEW: TNBehaviours can now be attached anywhere underneath a TNObject in hierarchy.
- NEW: Added TNManager.SetAlias convenience function.
- NEW: Added connect/disconnect notifications.
- FIX: Fix for channel data not being set/cleared properly in some cases.

Here's how to serialize a game object into a DataNode then save it to disk:
  1. DataNode data = gameObject.Serialize();
  2. data.Write("Assets/test.bytes");
Here's how to load a serialized game object, then create a new instance of it in the scene:
  1. DataNode data = DataNode.Read("Assets/test.bytes");
  2. GameObject go = data.Instantiate();
  3. go.name = "DataNode Instance";
« Last Edit: August 14, 2015, 11:53:19 AM by ArenMook »

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 2.1.1 (August 14th, 2015)
« Reply #33 on: December 11, 2015, 01:54:32 PM »
3.0.0
- NEW: DataNode is now fully capable of serializing entire hierarchies of game objects, making it trivial to export and save entire game objects, complete with mesh and texture information embedded in the data. TNet will keep references to items in the Resources folder and will include the raw data of those that aren't. Example usage: where you were using prefabs before you can now use exported DataNode binaries, making this data easily moddable (remember, Resources.Load only works on internal content!)
- NEW: TNet now seamlessly supports instantiation of DataNode-exported objects as if they were prefabs both via TNManager.Instantiate as well as manually via DataNode.Instantiate().
- NEW: Added support for multiple simultaneous channel subscriptions. You can now enter and leave multiple channels at will, effectively creating streamed content.
- NEW: Added the ability to seamlessly transfer instantiated objects from one channel to another.
- NEW: Added a new example showing multiple channel support and the ability to transfer objects.
- NEW: Added the LZMA library to TNet in order to support LZMA-compressed serialization for maximum bandwidth reduction when desired.
- NEW: TNBehaviour-derived scripts will now try to find the TNObject in Start() if it was not found in OnEnable.
- NEW: Added TNManager.WriteCache and TNManager.ReadCache for when you want to store server-specific files on the client side, such as downloaded textures.
- NEW: All of TNet's resource loading and type retrieval functions can now be overwritten via TNet.UnityTools in case you want to expand it / limit it somehow. Example: support loading data from mod folders.
- NEW: Added UnityTools.LoadPrefab(path) that is able to load both prefabs as well as DataNode-exported data files.
- NEW: Added a variety of extensions to UnityTools, such as GameObject.AddChild(prefab) and Transform.GetHierarchy(target).
- NEW: UnityTools.GetMD5Hash() can be used to compute a checksum of data. Example usage: check the local hash against server's before downloading a large file.
- NEW: DataNode.GetHierarchy("Full/Path/To/Node") and DataNode.SetHierarchy("Full/Path/To/Node", value).
- NEW: Expanded DataNode serialization of data, making it capable of serializing everything from common types to meshes, materials, textures, references to objects, and much more.
- NEW: Added System.Type extension methods such as Type.GetMethodOrExtension that's capable of searching all loaded assemblies for a desired extension.
- NEW: All types can now be made serializable into DataNode without deriving from an interface by simply adding an extension to their class such as "void Serialize (this Type, DataNode)". Look inside TNUnitySerializers for examples. Same with deserialization by adding a Deserialize extension.
- NEW: Added object.Invoke("method", params) extension for convenience.
- NEW: Added Unity menu options that can be used to export/import the selected object as a DataNode binary. Look for them in the Assets/DataNode submenu.
- NEW: Added TNManager.onObjectCreated callback that will be called every time any object gets created.
- NEW: TNet is now able to respond to a simple HTTP browser GET request. Simply connect to your server via http://127.0.0.1:5127/
- NEW: Added DataNode.ToArray([type]) to quickly convert DataNode to byte[].
- NEW: Added TNManager.packetSourceID that identifies the last Forward and Create type packet's source player ID.
- NEW: Added an offline mode to TNet that still supports full functionality identical to that of playing alone on a local server.
- NEW: DataNode now supports exporting prefabs using asset bundles export for situations when regular binary export is not suitable.
- NEW: It's now possible to pass an empty string to TNManager.Instantiate causing TNet to pass back a dummy object on creation, thus letting the game object's contents be procedurally set.
- NEW: Serialization.Convert<T>(value) will use TNet's serialization to convert types.
- NEW: RCCs no longer require an ID and can be called by their function name.
- NEW: It's no longer necessary to call TNManager.AddRCCs. TNet will find all RCCs automatically.
- NEW: Expanded the chat example to support /get and /set commands that change server configuration.
- NEW: Added TNManager.GetChannelList().
- NEW: Added a new example showing a simple car with a frequent input and an infrequent rigidbody sync.
- NEW: TNManager.SetServerData, TNManager.SetChannelData and TNManager.SetPlayerData now all set only the path requested, not the entire thing.
- NEW: Calling TNManager.SetPlayerSave(filename) will now load previously saved player data and will auto-save the player's data into that file.
- NEW: GameServer will now periodically auto-save on its own, and no longer requires you to call SaveTo().
- NEW: Added DestroySelf(delay) functions to TNObject and TNBehaviour.
- NEW: TNManager will no longer send out expensive broadcasts such as OnNetworkConnect. Subscribe to an appropriate delegate instead, such as TNManager.onConnect. Examine TNEventReceiver for more details: http://pastebin.com/qE3xqG9h
- NEW: Added FieldOrProperty: a convenience class that's able to get/set values of both fields and properties with the same code, and with automatic type conversion via TNet's serialization. Example: transform.SetFieldOrPropertyValue("position", "(1, 2, 3)");
- NEW: Added an optional RuntimeCode extension package that makes executing run-time C# code trivial: RuntimeCode.Execute(code);
- NEW: Various new tutorials have been added.
- FIX: Player connecting to the TNServerInstance will now be its admin by default.
- FIX: Changing server options now immediately saves the server's configuration.
- FIX: TNet will no longer store RFCs for objects that have been deleted.
- FIX: TNet's threads will now go into extended sleep while the application is paused.
- FIX: DataNode with no name set should now be correctly text-serializable.
- FIX: Prefabs no longer need to be brought into the scene to export them as DataNode.
- DEL: Removed TNManager.SyncPlayerData(). Calling TNManager.SetPlayerData(...) will now sync automatically.

New video tutorial: https://www.youtube.com/watch?v=7oBhEwAHU5w
« Last Edit: February 24, 2016, 07:50:02 AM by ArenMook »

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.1 (Apr 7, 2016)
« Reply #34 on: April 07, 2016, 05:01:12 PM »
3.0.1
- NEW: Added 2 new tutorial PDFs: executing runtime code and runtime C# behaviours.
- NEW: DataNode's Merge() function now returns 'true' if any existing node's values were actually altered.
- FIX: Replaced Thread.Abort() calls with Interrupt() and Join() combos. This aids iOS compatibility.
- FIX: Fix for ForwardToPlayer and ForwardByName not parsing the packets properly.
- FIX: Updated the stand-alone server solution to compile with the latest changes.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.1 (Apr 7, 2016)
« Reply #35 on: June 12, 2016, 07:10:01 AM »
3.0.2
- NEW: Full IPv6 support.
- NEW: Serialization of structs without public fields now defaults to serializing properties.
- NEW: Added Type.IsStruct() extension method.
- NEW: Added [SerializeProperties] attribute that makes TNet serialize get/set properties, not just fields.
- FIX: Now explicitly specifying Unity's full library name for better type retrieval in Unity 5.
- FIX: (302d) Fixed the listening port not being set properly when restarting the server without restarting the app.
« Last Edit: July 04, 2016, 10:02:30 PM by ArenMook »

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.2d (July 4th, 2016)
« Reply #36 on: July 30, 2016, 05:38:41 AM »
3.0.3
- NEW: Added a robust WorkerThread class that can be used as a simple to use thread pool: WorkerThread.Create(delegate, <optional>), where <optional> delegate will be executed on the main thread when the threaded delegate finishes.
- NEW: TNServer executable now supports -ipv6 to use IPv6.
- NEW: TNServer executable now supports -fn [filename] to set the save filename.
- FIX: TCP lobby client's error string will be cleared when reconnected.
- FIX: TNSerializer will now serialize DateTime as a long.
- FIX: TNManager.Connect(address) now supports IPv6 just like TNManager.Connect(address, port) already did.
- FIX: More tweaks to IPv6, making it more robust.
- FIX: Tools.externalAddress will now reveal an IPv6 address if using IPv6.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.3 (July 30th, 2016)
« Reply #37 on: August 23, 2016, 01:39:00 AM »
3.0.4
- NEW: Added a convenient set of Get and Set functions on the TNBehaviour and TNObject classes for simple per-object property persistence.
- NEW: Added TNManager.serverUptime and TNManager.time (how long the server was up).
- NEW: Added multi-stage callback support to the WorkerThread's main thread callbacks.
- NEW: Added a maximum time limiter to the WorkerThread's main thread execution, limiting the time that it takes up in the Update().

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.4 (August 23rd, 2016)
« Reply #38 on: September 21, 2016, 07:37:43 AM »
3.0.5
- NEW: TNet now automatically forces Application.runInBackground to be 'true' when connected.
- NEW: Exposed TNObject.dataNode in case you need to run through its data manually.
- NEW: TNObject's Set now accepts a hierarchical path, not just a single value name.
- NEW: Added WorkerThread.remainingCallbackCount that returns the number of callbacks still waiting to be executed.
- NEW: Added DataNode.FindChild that can search for a child with the specified name.
- NEW: Player data under the "Server" child node will now be only settable by the server. Trying to set anything under the "Server" node from the client side is simply ignored by the server.
- NEW: The server now automatically tracks the player's played time: player.Get<long>("Server/playerTime").
- FIX: Setting player data offline will now trigger the onSetPlayerData notification.
- FIX: TNObject now stores static and dynamic IDs separately
- FIX: Added proper double support to the TNet's serializer.
- FIX: TNet.Tools.GetDocumentsPath will now return a valid path even if no applicationDirectory has been set.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.5 (September 21st, 2016)
« Reply #39 on: November 27, 2016, 05:31:27 PM »
3.0.6
- NEW: Added a string ID to RFC that you can specify to uniquely identify identical RFCs underneath the same TNObject. For example: having two turrets underneath one TNObject with each script having a "Fire" function. You can now specify a name of the property that will uniquely identify the RFC, thus making it possible to call only that one RFC instead of both at once. To call only that RFC, instead of tno.Send("name", ...) use tno.Send("name/property", ...);
- NEW: WorkerThread now has a "priority" queue. All items in the priority queue gets processed before the regular queue.
- NEW: Added OnInit() function to TNBehaviour. Use it instead of Awake() as it will be called as soon as the object gets created, but unlike Awake() it's called after the TNObject's ID has been set.
- NEW: TNManager.playedTime will show the player's /played time. Played time is tracked automatically  via the player's save file.
- NEW: It's now possible to assign the TNObject's data on creation. Useful if you mean to pass some starting data to your RCC.
- NEW: Selecting a TNObject in Unity will now show its associated DataNode's data in inspector.
- NEW: Added WorkerThread.elapsedMilliseconds you can check at the end of your finished function callbacks to see how long the worker thread's functions took to execute.
- NEW: WorkerThread now has a SINGLE_THREADED #define to aid with debugging.
- NEW: WorkerThread's maximum milliseconds per frame spent in the update function is now settable at run-time.
- NEW: Added a simple TNet.Counter class that can be used for server-side resource counters that automatically change with time. For example: energy production at your game's base.
- NEW: Added TNManager.IsHosting(channel) and added a warning to the TNManager.isHosting property.
- FIX: Fixed some places that still used TNManager.isHosting.
- FIX: Fixed a bug in DataNode related to serialization of custom classes as text.
- FIX: DataNode.SetHierarchy(path, null) will no longer remove the node's parent.
- FIX: When retrieving a list of network interfaces, unknown status interfaces will no longer be ignored.
- FIX: Improvements of how nested TNObjects work.
« Last Edit: November 28, 2016, 12:40:03 PM by ArenMook »

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.6b (November 28, 2016)
« Reply #40 on: January 23, 2017, 09:12:46 AM »
3.0.7
- NEW: It's now possible to disable the TNBehaviour in an Awake() function, preventing it from sending out messages or trying to ensure that a TNObject actually exists. Useful for when you need to render an object with network scripts into an off-screen texture, for example.
- NEW: TNet now tracks sent and received packets per second. TNManager.sentPackets / receivedPackets.
- NEW: TNManager now has one source for LoadScene functions -- an easily changed pair of delegates.
- NEW: TNObject.IsJoiningChannel convenience function.
- NEW: Added TNObject.RemoveSavedRFC to remove a previously sent RFC function.
- NEW: Added an "ignore warnings" flag to the TNObject that will suppress messages about missing RFCs.
- NEW: All of TNet's thread creation is now routed through a TNet.Tools.CreateThread function.
- FIX: TNManager now listens to application quit messages, preventing its singleton from being created after.
- FIX: When transferring objects between channels, their RFCs will now be kept in the same order.
- FIX: Get/Set functions on the TNObject no longer work if the object's ID is 0.
- FIX: TNSyncRigidbody will behave better when synchronizing an object that's marked as kinematic.
- FIX: WorkerThread.remainingCallbackCount now considers active threads as well.
- NOTE: TNBehaviour no longer has a virtual OnEnable(), but now it has a virtual Awake() and Start() functions.
« Last Edit: January 23, 2017, 09:23:14 AM by ArenMook »

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.7 (January 23, 2017)
« Reply #41 on: February 24, 2017, 10:26:55 AM »
3.0.8
- NEW: It's now possible to "soft-destroy" TNObjects by setting tno.ignoreDestroyCall = false in TNObject's onDestroy delegate callback. This will effectively make TNet behave like this object was destroyed already, without actually destroying the game object. Example usage would be immediately destroying a networked object (such as the player's car) as far as networking is concerned, while still keeping a copy for post-processing, such as making it break up into pieces before an explosion.
- NEW: Added an "assign unique ID" button to static TNObjects shown when the ID is 0.
- NEW: WorkerThread.totalExecutionTime shows the total execution time for this function, cumulative over repeated execution calls (multi-stage execution).
- ALT: WorkerThread.currentExecutionTime can be checked in worker thread's main thread (OnFinished) callbacks to check how long the function has been executing so far. Replaces 'elapsedMilliseconds'.
- ALT: WorkerThread.mainFrameTimeExceeded can be checked in the main thread's (OnFinished) callbacks to see if the multi-stage callback should exit early and continue next update to prevent FPS degradation. Replaces 'mainThreadTimeExceeded'.
- ALT: DataNodeExporter.ShowExportDialog / ShowImportDialog were moved to UnityEditorExtensions.
- FIX: Fixes to TNet.Counter not serializing the time properly in some cases.
- FIX: Fix to RequestSetUDP packet parsing IP from address bytes, causing issues in some cases. It now uses it directly.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.8 (Feb 24, 2017)
« Reply #42 on: April 22, 2017, 01:29:50 PM »
3.0.9
- NEW: TNManager.Instantiate will now always assign a TNObject to the created object, even if there isn't one. If you want to create a local-only (non-networked) object, use an RFC instead.
- FIX: Better visualization for game server addition/removal on the lobby server.

ArenMook

  • Administrator
  • Hero Member
  • *****
  • Thank You
  • -Given: 337
  • -Receive: 1171
  • Posts: 22,137
  • Toronto, Canada
    • View Profile
Re: Latest Version: 3.0.9 (Apr 22, 2017)
« Reply #43 on: September 22, 2017, 03:01:31 PM »
3.1.0
- NEW: Added the ability to compile entire projects at runtime using RuntimeCode.Add(source file code). Requires Unity 5+.
- NEW: Expanded TypeExtensions with even better caching for much faster lookups.
- NEW: TypeExtensions.AddAssembly and RemoveAssembly to add/remove plugins at run-time.
- NEW: Ping response now returns the server time and number of connected clients.
- NEW: Ping response now performs a built-in time speed hack check, for convenience.
- NEW: Added ban/unban functionality to the lobby servers.
- NEW: Added the ability to change TNObject.owner at will.
- NEW: TNManager.currentRccObjectID is now available at the time of object creation, in case you want to use its ID as a random seed.
- NEW: Added a convenience method tno.canSend to check if it's currently possible to send messages through this object.
- NEW: Added TNet.Tools.CreatePath(path).
- FIX: TNObject channel ID and TNManager.IsInChannel calls with multiple channels will now return proper values even when testing in offline mode.
- FIX: Fix for DestroySelf() not working properly offline since the last set of changes.
- FIX: OnLoadLevel notification will now clean up all objects belonging to the channel, effectively removing objects that would have been removed as a result of a normal Unity scene change anyway.
- ALT: TNGameServer is now all protected instead of private, making it possible to inherit from it easier.
- ALT: TNGameServer's OnCustomPacket now accepts a byte ID instead of a Packet enum.
- DEL: Got rid of Tools.FindType (use GetType instead). Its code is in TypeExtensions.GetType now.

Example test for the new RuntimeCode.Add that allows the addition of entire projects, compiling your assembly from source files on the fly:
  1. using UnityEngine;
  2. using TNet;
  3.  
  4. public class Test2 : MonoBehaviour
  5. {
  6.         void Start ()
  7.         {
  8.                 // Example A: Executing a single line of code:
  9.                 RuntimeCode.Execute(@"Debug.Log(typeof(TNet.TNManager));");
  10.  
  11.                 // Example B: Compiling a MonoBehaviour from source at runtime:
  12.                 var text = @"
  13.                 using UnityEngine;
  14.  
  15.                 public class Test3 : MonoBehaviour
  16.                 {
  17.                         void Start () { InvokeRepeating(""LogTest"", 1f, 1f); }
  18.                         void LogTest () { Debug.Log(""Test""); }
  19.                 }";
  20.  
  21.                 RuntimeCode.Add(text);
  22.  
  23.                 var type = TypeExtensions.GetType("Test3");
  24.                 if (type != null) gameObject.AddComponent(type);
  25.                 else Debug.LogError("Can't find the type");
  26.         }
  27. }