forked from facebookarchive/RakNet
-
Notifications
You must be signed in to change notification settings - Fork 64
/
readme.txt
2434 lines (2155 loc) · 117 KB
/
readme.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
SLikeNet™ 0.1.3
===============
Copyright © 2016-2019 SLikeSoft™ UG (haftungsbeschränkt)
Part of the documentation in this readme file was taken from RakNet 4.082
readme files. These sections are marked with [partially copied from RakNet].
Please see licenses/RakNet license.txt for the underlying license and related
copyright.
The latest version and information are available at https://www.slikenet.com/
Table of Contents
0. Quickstart
1. What is SLikeNet?
1.1 History of SLikeNet
1.2 Version scheme and deprecation process
1.2.1 Pre 1.0 releases
1.2.2 Alpha releases
1.2.3 Beta releases
1.2.4 1.x.y releases
1.2.5 2.x.y and following releases
1.2.6 Client / Server compatibility
1.2.7 API deprecation and dropping support for 3rd party versions
1.3 Changes between RakNet (4.081/4.082) and SLikeNet
2. System/Dependency requirements
2.1 Limitations on supported OSs, build environments, and 3rd party
libraries
2.2 Compiler support
2.3 OS support
2.4 3rd party libraries/dependencies
2.4.1 Boost
2.4.2 BZip2
2.4.3 FMOD Ex
2.4.4 Independent JPEG Group's free JPEG software
2.4.5 Irrlicht Engine
2.4.6 irrKlang
2.4.7 Jansson
2.4.8 libcatid
2.4.9 Microsoft DirectX SDK / Microsoft Windows SDK
2.4.10 MiniUPnP client
2.4.11 MySQL
2.4.12 NVIDIA Cg Toolkit
2.4.13 NVIDIA Compress YCoCg-DXT
2.4.14 Ogre3D
2.4.15 OpenSSL
2.4.16 PortAudio
2.4.17 PostgreSQL
2.4.18 Autodesk Scaleform GFx
2.4.19 speex
2.4.20 SQLite
2.4.21 Steamworks SDK
2.4.22 SWIG
2.4.23 Xdelta
2.4.24 XMLParser library
3. Getting Started
3.1 Downloading SLikeNet
3.1.1 Download from the webpage
3.1.1.1 Verifying the file integrity
3.1.1.2 Validating the download package
3.1.2 Downloading via SVN
3.1.3 Downloading via GIT
3.2 Using SLikeNet on Windows
3.2.1 Using prebuilt SLikeNet libraries with Microsoft Visual Studio
3.2.2 Building SLikeNet yourself with Microsoft Visual Studio
3.2.3 Provided default libraries
3.3 Using SLikeNet with Linux and OSX
3.3.1 Building SLikeNet
3.4 RakNet compatibility mode
3.4.1 Migrating from RakNet to SLikeNet
3.4.2 Building RakNet compatibility mode yourself
3.4.3 In-place replacement of RakNet
3.5 Development notes on differences between RakNet and SLikeNet
3.5.1 General notes
3.5.2 Retail configuration
3.5.3 OSX usage of @rpath for install_name
3.5.4 PacketLogger FormatLine() changes
3.5.5 CMake install destination and library names
3.5.6 Swig/C# wrapper changes
3.5.6.1 MakeSwig.bat/.sh
3.5.6.2 C#/Swig Visual Studio projects
3.5.6.3 C# new bindings directory
3.5.7 Changes in bundled 3rd-party dependencies
3.5.7.1 OpenSSL
3.5.8 Reorganized files/path structure
3.6 Configuring SLikeNet
3.6.1 Security relevant settings
3.7 SLikeNet and C#
3.7.1 Using SLikeNet in a C# project
3.7.2 RakNet compatibility mode
3.7.3 Generating C# bindings
3.7.3.1 Generating C# bindings on Windows
3.7.3.2 Generating C# bindings on Linux
3.7.3.3 MakeSwig.sh/.bat syntax
3.7 SLikeNet and C#
4. Dependent Extensions
4.1 AutopatcherMySQLRepository
4.2 AutopatcherPostgreRepository
4.3 BspCollision
4.4 DXTCompressor
4.5 IrrlichtDemo
4.6 MySQLInterface
4.7 Ogre3DInterpDemo
4.8 Matrices
4.9 PostgreSQLInterface
4.10 Rackspace
4.11 SQLite3Plugin / SQLite3ClientLogger / SQLite3ServerLogger
4.12 Swig
5. Samples
5.1 AutopatcherClient
5.2 AutopatcherClientGFx3.0
5.3 AutopatcherClientRestarter
5.4 AutopatcherClient_SelfScaling
5.5 AutopatcherServer
5.6 AutoPatcherServer_MySQL
5.7 AutopatcherServer_SelfScaling
5.8 ChatExample
5.9 CloudClient
5.10 CloudServer
5.11 CommandConsoleClient
5.12 CommandConsoleServer
5.13 ComprehensivePCGame
5.14 CrashReporter
5.15 DirectoryDeltaTransfer
5.16 Encryption
5.17 FCM2Host
5.18 FCM2Host_Simultaneous
5.19 FCM2VerifiedJoinSimultaneous
5.20 FullyConnectedMesh
5.21 iOS ChatClient
5.22 LANServerDiscovery
5.23 Lobby2Server_PGSQL
5.24 MessageFilter
5.25 NATCompleteClient
5.26 NATCompleteServer
5.27 PacketLogger
5.28 PHPDirectoryServer2
5.29 Ping
5.30 RackspaceConsole
5.31 RakVoice
5.32 RakVoiceDSound
5.33 RakVoiceFMOD / RakVoiceFMODAsDLL / RakVoiceFMODUsingDLL
5.34 ReadyEvent
5.35 ReplicaManager3
5.36 RoomsPlugin
5.37 Router2
5.38 RPC3
5.39 RPC4
5.40 SendEmail
5.41 SteamLobby
5.42 TeamManager
5.43 Timestamping
5.44 TwoWayAuthentication
5.45 UDP Forwarder
5.46 WinPhone8
6. Help and Support
6.1 Documentation
6.2 Contact Information and Support
7. A word on licensing
7.1 SLikeNet licensing (core and extended)
7.2 Licensed Code
7.2.1 (core) RakNet
7.2.2 (core) DR_SHA1.cpp/.h (SHA-1 algorithm - version 2.1)
7.2.3 (core) Rand.cpp (Mersenne Twister random number generator MT19937)
7.2.4 (core) KBhit.h
7.2.5 (core) FindBoost.cmake
7.2.6 (DependentExtension/Autopatcher) ApplyPatch.cpp, CreatePatch.cpp
7.2.7 (DependentExtension/DXTCompressor) OpenGLWindow.hpp
7.2.8 (DependentExtension/IrrlichtDemo) FindIrrlicht.cmake,
FindIrrKlang.cmake
7.2.9 (DependentExtension/IrrlichtDemo) CDemo.cpp/.h, CMainMenu.cpp/.h,
main.cpp
7.2.10 (DependentExtension/speex related) FindSpeex.cmake,
FindSpeexDSP.cmake
7.2.11 (Samples/nacl_sdk) httpd.py
7.2.12 (Samples/Ogre3D related) FindOGRE.cmake, FindOIS.cmake,
FindPkgMacros.cmake, PreprocessorUtils.cmake
7.2.13 (Samples/Ogre3D related) BspCollision.cpp
8. Donations
9. Thanks / Acknowledgments
10. Trademark Notes / Affiliation Statement
0. Quickstart
If you want to get started quickly simply follow these directions:
Windows™: see chapter 3.2.1 and use the prebuilt libraries
Linux®/OSX: see chapter 3.3.1
Migrating from RakNet to SLikeNet: see chapter 3.4.1
For quick instructions to comply with license requirements see:
licenses/_quick_licensing_slikenet_core.txt and
licenses/_quick_licensing_slikenet_extended.txt
1. What is SLikeNet?
SLikeNet™ is an Open Source/Free Software cross-platform network engine written
in C++ and specifically designed for games (and applications which have
comparable requirements on a network engine like games) building upon the
discontinued RakNet network engine which had more than 13 years of active
development. SLikeNet currently supports Windows, Linux and Mac with limited
support for iPhone®, Android™, Windows Phone™ 8, and Windows Store 8.
SLikeNet is not a simple rebranding of RakNet, but rather incorporates already
in its initial version several bug- and security fixes as well as changes to
bring the engine back on track with recent compiler and language changes.
1.1 History of SLikeNet
Like many teenagers in the 90th and in the early years of the 21st century the
developers have been quite into the area of computer games. One of them
actually took his hobby over to the professional life and started a career in
the games industry. Of special interest for him was the area of
multiplayer/network engines which he also took as the topic for his diploma
thesis.
Unfortunately, even after a decade in the industry and despite his passion for
that area, he didn't get the chance to directly work on a multiplayer
integration and could only invest his own spare time in this area.
2014 finally came the opportunity to change that when RakNet
(http://www.jenkinssoftware.com/), which was developed for over 13 years by
Kevin Jenkins / Jenkins Software LLC, got acquired by Oculus VR, LLC. and was
put under an open source license.
Initially the developers thought about mainly becoming an active member of the
community. However, it turned out that since GitHub® wasn't opened up, no
organized community established itself and the idea of the development of
RakNet being taken over by the community didn't come true.
While there were quite a few talented developers who provided patches on
GitHub and helped with providing support, there didn't seem to be any endeavor
to get an organizational structure around the continuous development of RakNet.
Hence, to the developers of SLikeNet the question arose how they could actually
help out here and what would be the best way to ensure that RakNet will
continue to thrive for several years to come. The conclusion was to found a
company (SLikeSoft™) and continue the work RakNet left behind under a fresh
name. That should provide a strong fundament and basis for the community to
rely on that their ideas, bugfixes, and features won't get lost but rather will
be integrated/handled in an organized manner.
1.2 Version scheme and deprecation process
SLikeNet is using the Semantic Versioning (version 2.0.0) authored by Tom
Preston-Werner. See http://semver.org/ for details.
1.2.1 Pre 1.0 releases
The initial versions on the way towards the 1.0.0 release will use the version
number 0.x.y to reflect the current (early) development stage of SLikeNet.
However, since SLikeNet is heavily based on the very well tested RakNet
library, we consider already these early versions way more stable than what you
would normally expect from a library with such a version number.
Furthermore, since our aim for SLikeNet 1.0.0 is to keep ABI/API/Protocol
compatibility with RakNet 4.081/4.082, we consider the API/ABI/Protocol of the
0.x.y releases already stable and do plan to change them only in order to fix
(undesired/unintended) API/ABI/Protocol incompatibility with RakNet which might
have slipped in during development.
Hence, in contrast to what the Semantic Versioning 2.0.0 permits, we are
considering the 0.1.0 API being stable, already.
1.2.2 Alpha releases
Starting with 1.0.0, for each new release we will go through a >= 2-weeks alpha
release period. During this period we will only implement bugfixes which are
considered safe or are fixes for regressions. Anything else will be postponed
and scheduled for a following version. If significant changes need to be made
for the released alpha version, we will release another alpha version and
restart the 2-weeks test period.
The version numbering for alpha releases will be x.y.z-alpha.d where d begins
with 1 and is incremented by 1 for each successive alpha release of the same
version.
1.2.3 Beta releases
After the alpha version passed without major rework and the risk assessment
concurred, we will release a beta version of the new version which starts the
beta test phase of at least 2 weeks. During that period we will only fix
regressions introduced in the new versions. Anything else will be postponed and
scheduled for a following version. If there is a regression fix during the beta
phase, we will release a new beta version and restart the 2 week test period.
The version numbering will be x.y.z-beta.d where d begins with 1 and is
incremented by 1 for each successive beta release of the same version.
1.2.4 1.x.y releases
The 1.x.y releases will ensure API, ABI, and protocol compatibility with RakNet
4.081/4.082. This way we allow everybody currently using RakNet in their
product to perform a simple in-place test of SLikeNet with as little work as
possible. In principle it will allow you to test SLikeNet by simply replacing
the RakNet DLLs without even having to recompile your game/application. If you
linked RakNet statically, all you need to do is to link against the SLikeNet
library. No other changes should be required. You can even run a client built
with RakNet 4.082 and connect it to a SLikeNet 1.x.y server (or vice versa).
1.2.5 2.x.y and following releases
2.0.0 will be the first release which breaks backwards compatibility with
RakNet. This allows us to integrate performance improvements and new features
which would otherwise be impossible to realize with keeping backwards
compatibility with RakNet. The server as well as the connecting clients will
require both at least running SLikeNet 2.0.0 in order to work together.
1.2.6 Client / Server compatibility
Any x.y.z version will always be compatible with any other x.y.z version as
long as x is the same (or differs by only 1 digit and is at least 2). For
instance: Running a server on 3.0.0 allows clients running 2.x.y up to 4.x.y to
connect to that server. From the other point of view: A client running version
4.0.0 can connect to any server running 3.x.y up to 5.x.y.
1.2.7 API deprecation and dropping support for 3rd party versions
From time to time we need to deprecate APIs/functions/classes/etc. In some
cases this is done in order to keep the network engine maintainable, in other
cases we might have to deprecate APIs for security reasons. For versions
>= 2.0.0 we will make sure that any API which is deprecated is still available
for the next major release (i.e. if we deprecate a version in 2.x.y, it will
still be available for all 3.x.y releases but will be dropped in 4.0.0). The
same goes for the deprecation of old 3rd party libraries.
There are however a couple of cases where we might deviate from this procedure.
Examples could be that security fixes require us to deprecate an API or 3rd
party library already earlier or we might deprecate 3rd party library versions
which are incompatible with new compilers. To comply with the Semantic
Versioning 2.0.0 we will announce the deprecation of the API/3rd-party library
version at least in a sub version of the current major release branch and then
remove it in the following major release.
For instance, if we learn that there's a security flaw in SLikeNet 2.0.5 which
requires a change to the API we mark the problematic function deprecated and
release 2.1.0. In the following 3.0.0 release the function will then be
removed.
1.3 Changes between RakNet (4.081/4.082) and SLikeNet
RakNet 4.081 was the final release of RakNet with 4.082 having been in
development. SLikeNet is based on the sourcecode of RakNet 4.082 and aims for
API, ABI, and protocol compatibility with RakNet 4.081/4.082.
That way it's possible to use (and evaluate) SLikeNet as an in-place
replacement for RakNet.
The major differences/improvements of SLikeNet over RakNet are:
- added support for the latest compilers and dropped support for older
compilers
- added support for newer versions of 3rd-party libraries
- security enhancements (f.e. by fixing buffer overflows, using security
enhanced CRT functions, replacing obsolete less secure CRT functions with
up-to-date ones, etc.)
- replaced Multi-Byte Character support with Unicode support
- warning free compiling/linking (i.e. warnings RakNet triggered when building
the source were resolved)
- easier way to get started with SLikeNet by providing precompiled libraries
and easily loadable/upgradable solution/project files for recent Visual
Studio versions
- extended documentation
- countless bugfixes and improvements (see changelog.txt for details)
There are also a couple of restrictions SLikeNet has when comparing its feature
set with RakNet. Some of them are going to be dealt with in later versions,
some of them however are not planned to be resolved. If any of the missing
features/support is causing you trouble to try out SLikeNet, drop us a note
(see chapter 6) and we'll see whether we find a solution for you.
There are mainly the following reasons behind this decision:
a) license restrictions prevent us to provide the same support RakNet used to
provide (marked with "licensing" in the following list)
b) we intentionally dropped support, so to reduce the maintenance work and be
able to make use of new language and 3rd-party-library features (marked with
"deprecated" in the following list)
c) especially for the first versions we had to prioritize the work and had to
postpone work on certain parts but are planning to do so in later versions
(marked with "later in the following list)
The following list presents the known restrictions:
- dropped support for old/outdated libraries (deprecated)
- dropped support for old compilers (deprecated)
- removed the following source code files/directories:
- DependentExtensions/DXTCompressor/External/include/*.h (deprecated)
- DependentExtensions/DXTCompressor/External/include/GL/glext.h
(deprecated)
- DependentExtensions/IrrlichtDemo/irrKlang-1.1.3/*.* (licensing)
- DependentExtensions/IrrlichtDemo/irrKlang.dll (licensing)
- Samples/Marmalade (licensing)
- Samples/AutopatcherClientGFx3.0/GFxPlayerTinyD3D9.cpp (licensing)
- Samples/Lobby2ClientGFx3.0/GFxPlayerTinyD3D9.cpp (licensing)
- Samples/RoomsBrowserGFx3/GFxPlayerTinyD3D9.cpp (licensing)
- dropped support for the following platforms (licensing):
- Xbox 360®
- PlayStation® Vita
- Playstation 3
- limited support for iOS, Android, Windows Phone 8, Windows Store 8 (later)
- limited support for Samples and Tests (later)
- limited support for RakVoiceFMOD (later)
- missing support for server related features like Lobby3, MasterServer,
MasterServer2, etc. (later)
2. System/Dependency requirements
2.1 Limitations on supported OSs, build environments, and 3rd party libraries
SLikeNet supports a brought variety of different compilers, OSs, build tools,
and 3rd part libraries.
We are aiming to provide a stable environment for our users to have SLikeNet
build with the supported compilers/build tools/3rd party libraries and run on
all the supported OSs.
Obviously it's unfeasible to test each release with all possible combinations
of compilers(-versions), on all OSs, and with all versions of the 3rd party
dependencies.
Therefore, we decided to restrict the full support as follows:
Compiler/Build tools:
We only provide full support for the latest patch release of a compiler. That
means that for the Visual Studio 2013 compiler we only support VS 2013 Update 5
(but not Update 1 to Update 4 and also not the unpatched Visual Studio 2013
compiler).
OSs:
We test SLikeNet on the fully patched earliest and on the latest version of the
supported OS. Full support is only provided for the operation systems listed
below. For instance we support Microsoft™ Windows XP but only if Service Pack 3
is installed (and all available OS patches are applied). Windows XP without any
service pack or only SP1/SP1a/SP2 installed is unsupported.
3rd party libraries:
3rd party libraries are tested with the earliest supported version and the
latest supported one. Furthermore, we are only supporting the latest patch
release of a 3rd-party library. As an example this means that we support Boost
1.46.1 but not Boost 1.46.0.
By restricting the support we certainly don't mean that SLikeNet won't work
with a compiler version, 3rd party library version or OS version which is not
listed here. It simply means that we haven't tested that combination and you
might run into issues or warnings might show up during the build. SLikeNet
however might still work just fine.
If your preferred (build) environment is not listed here and you'd like to get
full support for it, please contact us (see chapter 6) so we can see whether we
can add full support for your combination.
If a compiler/OS/3rd party is listed as supported, we are considering any issue
SLikeNet runs into with that environment a problem we have to deal with. If
however you are running into problems with an unsupported combination (for
instance the code not being compilable with an ancient version of Visual Studio
like VC6) we might in the end ask you to upgrade to one of the supported
compilers/OSs/3rd-party libraries.
A special note on Xcode® / OSX support:
Our test capabilities are limited on OSX atm. Therefore, we cannot test
SLikeNet at the moment on any other compiler than the one listed below. Since
RakNet originally supported the OSXSDK 10.5+ we are listing that version as
limited support. If you are testing SLikeNet with an older version of Xcode and
are running into any issues, we'd appreciate a short note (preferably with the
compiler error output).
Xbox 360/Playstation Vita/Playstation 3:
RakNet originally supported these platforms. Presumably due to license
restrictions the support couldn't be made open source however. If you require
support for these platforms, please contact us (see chapter 6).
2.2 Compiler support
Microsoft Visual Studio™: 2010 SP1, 2012 Update 1, 2013 Update 5, 2015
Update 3, 2017 15.4.1
GNU Compiler Collection: 4.6.4, 4.7.4, 4.8.5, 4.9.3, 5.4.0
Xcode: 7.3.1 (limited support for 3.0+ with OSXSDK 10.5+)
CMake®: 2.6.4 2.8.12.2, 3.0.2, 3.1.3, 3.2.3, 3.3.2, 3.4.3, 3.5.2, 3.6.3,
3.7.2
2.3 OS support
Microsoft Windows: Windows XP (SP3), Windows XP x64 (SP2), Windows Vista®
(SP2), Windows 7 (SP1), Windows 8.1,
Windows 10 (1607 / 1703)
Linux: Ubuntu 14.04/16.04
OSX: 10.12 (Sierra) (limited support for 10.5 (Leopard) and later)
2.4 3rd party libraries/dependencies
While the SLikeNet core engine does not rely on any 3rd party library, several
samples, dependent extensions and also certain optional SLikeNet features make
heavy use of 3rd party libraries/code. This chapter provides an overview of
which 3rd party libraries are used for which configurations/samples and which
versions are supported.
3rd party libraries which are bundled with SLikeNet are marked as such. For
these we also list the 3rd party library's license and reference the location
of the license file.
2.4.1 Boost
Description: Boost provides free peer-reviewed portable C++ source
libraries.
URL: https://www.boost.org/
Supported versions: 1.34.1, 1.35.0, 1.36.0, 1.37.0, 1.38.0, 1.39.0, 1.40.0,
1.41.0, 1.42.0, 1.43.0, 1.44.0, 1.45.0, 1.46.1, 1.47.0,
1.48.0
Used in:
- Ogre3dInterpDemo (see 4.7)
- RPC3 (see 5.38)
2.4.2 BZip2
Description: bzip2 is a freely available, patent free, high-quality data
compressor.
URL: http://www.bzip.org/
Supported versions: 1.0.6 (bundled)
Used in:
- AutopatcherClient_SelfScaling (see 5.4)
- AutopatcherClientGFx3.0 (see 5.2)
- AutopatcherMySQLRepository (see 4.1)
- AutopatcherPostgreRepository (see 4.2)
- AutopatcherServer (see 5.5)
- AutopatcherServer_MySQL (see 5.6)
- AutopatcherServer_SelfScaling (see 5.7)
License: BSD style License
License file(s): licenses/bzip2 license.txt
2.4.3 FMOD® Ex
Description: FMOD is a sound effects engine for video games and applications
developed by Firelight Technologies Pty Ltd.
URL: https://www.fmod.com/
Supported versions: 4.38.07+
Used in:
- RakVoiceFMOD (see 5.33)
2.4.4 Independent JPEG Group's free JPEG software
Description: A package containing C software to implement JPEG image
encoding, decoding, and transcoding.
URL: http://www.ijg.org/
Supported versions: version 7 (6b for Microsoft DirectX® - 8d for Irrlicht
Engine) (version 7 is bundled)
Used in:
- Irrlicht Engine (see 2.4.5)
- Microsoft DirectX (see 2.4.9)
- SQLite3ServerLogger (see 4.11)
License: Independent JPEG Group License
License file(s): licenses/jpglib license v6b.txt, licenses/jpglib
license v7.txt, licenses/jpglib license v8d.txt
Note:
A different license (GPL) applies to ansi2knr.c. This source code file is
however not used by the SQLite3ServerLogger integration and hence doesn't
have any license implications there. For the usage in Microsoft DirectX and
the Irrlicht Engine we can't make an explicit statement, though.
2.4.5 Irrlicht Engine
Description: The Irrlicht Engine is an open source high performance realtime
3D engine written in C++.
URL: http://irrlicht.sourceforge.net/
Supported versions: 1.8.4 (some binary files bundled)
Dependencies:
- Independent JPEG Group's free JPEG software (see 2.4.4)
Used in:
- IrrlichtDemo (see 4.5)
License: libpng™/zlib license
License file(s): licenses/Irrlicht Engine License.txt, libpng license.txt,
zlib license.txt
2.4.6 irrKlang
Description: irrKlang is a cross platform sound library for C++, C# and all
.NET languages.
URL: http://www.ambiera.com/irrklang/
Supported versions: 1.1.3
Used in:
- IrrlichtDemo (see 4.5)
2.4.7 Jansson
Description: Jansson is a C library for encoding, decoding and manipulating
JSON data.
URL: http://www.digip.org/jansson/
Supported versions: 2.4 (bundled)
Used in:
- AutopatcherServer_SelfScaling (see 5.7)
- ComprehensivePCGame (see 5.13)
- Rackspace (see 4.10)
License: MIT License
License file(s): licenses/Jansson License.txt
2.4.8 libcatid
Description: CatId Common Code Library - a collection of different code
snippets.
URL: https://github.com/catid/libcat
Supported versions: 1.0 (bundled)
Used in:
- Core (if LIBCAT_SECURITY is set to 1)
License: Modified BSD License
License file(s): licenses/libcatid license.txt
2.4.9 Microsoft DirectX SDK / Microsoft Windows SDK
Description: DirectX is a set of low-level APIs for creating games and other
high-performance multimedia applications.
Note: As of Windows SDK 8.0 DirectX was integrated into the Windows SDK and
is no longer shipped as a separate SDK.
URL: https://msdn.microsoft.com/library/windows/apps/hh452744
Supported versions: DirectX SDK June 2010 (Matrices contains modified DX
sample source code and uses some DX resource files) /
WinPhone8: Windows SDK 8.0, 8.0A, 8.1, 8.1A, 10 (builds:
10.0.10240.0, 10.0.10586.212, 10.0.14393.795,
10.0.15063.0, 10.0.16299.0)
Dependencies:
- Independent JPEG Group's free JPEG software (see 2.4.4)
Used in:
- AutopatcherClientGFx3.0 (see 5.2)
- Matrices (see 4.8)
- Ogre3D (see 2.4.14)
- RakVoiceDSound (see 5.32)
- WinPhone8 (see 5.46)
License: Microsoft Software License Terms - Microsoft DirectX Software
Development Kit (SDK)
License file(s): licenses/DirectX SDK EULA.txt
2.4.10 MiniUPnP client
Description: A UPnP Internet Gateway Device (IGD) control point.
URL: http://miniupnp.free.fr/
Supported versions: 1.7 pre-release (1.5 for IrrlichtDemo) (bundled)
Used in:
- ComprehensivePCGame (see 5.13)
- IrrlichtDemo (see 4.5)
- NATCompleteClient (see 5.25)
License: Modified BSD License
License file(s): licenses/MiniUPnP License.txt
Notes:
bsdqueue.h has separate license terms (also licensed under the Modified BSD
License, however).
2.4.11 MySQL®
Description: MySQL is the world's most popular open source database.
URL: https://www.mysql.com/
Supported versions: 5.1.30
Used in:
- AutopatcherMySQLRepository (see 4.1)
- AutoPatcherServer_MySQL (see 5.6)
- MySQLInterface (see 4.6)
2.4.12 NVIDIA® Cg Toolkit
Description: The Cg Toolkit is a legacy NVIDIA toolkit allowing to use
programmable shading with Cg.
URL: https://developer.nvidia.com/cg-toolkit
Supported versions: 2.2 (bundled)
Used in:
- DXTCompressor (see 4.4)
License: NVIDIA license
License file(s): licenses/NVIDIA Cg Toolkit.txt
2.4.13 NVIDIA Compress YCoCg-DXT
Description: This example demonstrates how a pixel shader can be used to
compress a dynamically rendered color map into a texture, using
both the DXT1 and YCoCg-DXT5 texture formats.
URL: http://developer.download.nvidia.com/SDK/10/opengl/samples.html#compress_YCoCgDXT
Supported versions: version downloaded 04/17/2017 (partially bundled with
modifications)
Used in:
- DXTCompressor (see 4.4)
License: NVIDIA license, GLEW: Modified BSD License and MIT License
License file(s): licenses/NVIDIA Compress YCoCg-DXT.txt,
licenses/glut license.txt
Notes:
NVIDIA Compress YCoCg-DXT contains a version of GLUT which appears to have
been a continuation by Mark J. Kilgard of the discontinued OpenGL Utility
Toolkit. The contained glut.h header file suggests it is freely
distributable and doesn't specify a separate license. Furthermore, it
bundles GLEW (The OpenGL Wrangler Extension Library) 1.5.0.
2.4.14 Ogre3D
Description: OGRE (Object-Oriented Graphics Rendering Engine) is a
scene-oriented, flexible 3D engine written in C++ designed to
make it easier and more intuitive for developers to produce
games and demos utilizing 3D hardware.
URL: http://www.ogre3d.org/
Supported versions: 1.7.4
Dependencies:
- Microsoft DirectX SDK (see 2.4.9)
Used in:
- BspCollision (see 4.3)
- Ogre3DInterpDemo (see 4.7)
2.4.15 OpenSSL®
Description: OpenSSL is an open source project that provides a robust,
commercial-grade, and full-featured toolkit for the Transport
Layer Security (TLS) and Secure Socket Layer (SSL) protocols.
It is also a general-purpose cryptography library.
URL: https://www.openssl.org/
Supported versions: 1.0.0d-1.0.2i (1.0.2i bundled)
Used in:
- Core (if OPEN_SSL_CLIENT_SUPPORT is set to 1)
License: BSD-style license
License file(s): licenses/OpenSSL License.txt
2.4.16 PortAudio
Description: PortAudio is a free, cross-platform, open-source, audio I/O
library.
URL: http://www.portaudio.com/
Supported versions: v18.1 (bundled)
Used in:
- RakVoice (see 5.31)
License: MIT-style License
License file(s): PortAudio License.txt
2.4.17 PostgreSQL®
Description: PostgreSQL is a powerful, open source object-relational
database system.
URL: https://www.postgresql.org/
Supported versions: 9.1.24
Used in:
- AutopatcherPostgreRepository (see 4.2)
- AutopatcherServer (see 5.5)
- AutopatcherServer_SelfScaling (see 5.7)
- PostgreSQLInterface (see 4.9)
- Lobby2Server_PGSQL (see 5.23)
2.4.18 Autodesk® Scaleform® GFx
Description: Autodesk Scaleform middleware provides a design-driven workflow
for creating powerful and immersive user interface (UI)
environments for PCs, game consoles, mobile devies, and
consumer electronics.
URL: https://www.autodesk.com/products/scaleform/overview
Supported versions: 3.x
Used in:
- AutopatcherClientGFx3.0 (see 5.2)
2.4.19 speex
Description: Speex is an OpenSource/Free Software patent-free audio
compression format designed for speech.
URL: https://www.speex.org/
Supported versions: 1.1.12 (bundled)
Used in:
- RakVoice (see 5.31)
- RakVoiceDSound (see 5.32)
- RakVoiceFMOD (see 5.33)
- RakVoiceFMODAsDLL (see 5.33)
- RakVoiceFMODUsingDLL (see 5.33)
License: Modified BSD License
License file(s): licenses/speex license.txt
2.4.20 SQLite®
Description: SQLite is a self-contained, high-reliability, embedded,
full-featured, public-domain, SQL database engine. SQLite is
the most used database engine in the world.
URL: https://www.sqlite.org/
Supported versions: 3.6.13 (bundled)
Used in:
- BspCollision (see 4.3)
- Matrices (see 4.8)
- SQLite3Plugin (see 4.11)
- SQLite3ClientLogger (see 4.11)
- SQLite3ServerLogger (see 4.11)
License: Public Domain
License file(s): n/A
2.4.21 Steamworks® SDK
Description: Steamworks is a free suite of tools available to any developer
to use in their game or software on Steam®.
URL: https://partner.steamgames.com/
Supported versions: 1.15-1.23a
Used in:
- SteamLobby (see 5.41)
2.4.22 SWIG
Description: SWIG is a software development tool that connects programs
written in C and C++ with a variety of high-level programming
languages.
URL: http://www.swig.org/
Supported versions: 2.0.0-2.0.12
Used in:
- Swig (see 4.12)
2.4.23 Xdelta
Description: Xdelta is a C library and command-line tool for delta
compression using VCDIFF/RFC 3284 steams.
URL: http://xdelta.org/
Supported versions: 3.0.6
Used in:
- AutopatcherServer_SelfScaling (see 5.7)
2.4.24 XMLParser library
Description: This is a basic XML parser written in ANSI C++ for portability.
URL: http://www.applied-mathematics.net/tools/xmlParser.html
Supported versions: 2.44 (bundled)
Used in:
- RoomsBrowserGFx3 (not yet documented)
License: Modified BSD License
License file(s): licenses/xmlParser license.txt
3. Getting Started
We provide different ways to build and integrate SLikeNet yourself. For
Windows, we also provide prebuilt libraries to make it as painless as possible
for you to get started.
Furthermore, if you are currently using RakNet 4.081/4.082, we provide a
compatibility mode which allows you to build SLikeNet without any code changes
on your side as an in-place replacement (see chapter 3.4).
If you are using RakNet via DLLs/shared objects you can even replace the DLLs
directly with the correct counterparts of SLikeNet to give it a try.
Note that we also ship the RakNet help as part of SLikeNet. The help files are
located in Help/RakNet and provide references, documentation, and tutorials
which are still useful even if you are using SLikeNet. Unless you define the
macro RAKNET_COMPATIBILITY for your build, you should rename the namespace
RakNet -> SLikeNet and use the includes: <slikenet/foo.h> (instead of simply
including <foo.h>). See chapter 3.5 for further details.
Otherwise, most of the samples/tutorials provided in the help documentation
should still run with SLikeNet the same way.
In the following chapters [SLikeNet] corresponds to the path you extracted the
SLikeNet package to.
3.1 Downloading SLikeNet
We provide the following ways to download SLikeNet:
3.1.1 Download from the webpage
The main download source is via our webpage. Just go to
https://www.slikenet.com/ and download the version there.
We provide different kind of packages. The packages not marked as "source" are
containing prebuilt libraries to simplify getting started and reducing the
maintenance overhead, since they do not require setting up a build environment
for SLikeNet.
Since the packages are however quite large, we also provide the source packages
which contain the complete package (including source code and documentation)
except for the large prebuild libraries.
ZIP and RAR archives are containing the source code and text files with Windows
line endings while the TAR.GZ archive contains the files with Linux line
endings.
3.1.1.1 Verifying the file integrity
The used RAR, TAR.GZ, and ZIP archives have built-in checksums to verify the
data integrity of the package. You can use the different archive tools to
ensure the package was downloaded correctly and isn't broken.
In addition to this, you can calculate the MD5, SHA-1, SHA-256, or SHA-512 hash
of the archive and compare it against the hash value noted at the download
page.
3.1.1.2 Validating the download package
In order to validate the downloaded package was really published by SLikeNet
and wasn't altered with by someone else, ASCII armored signatures are provided
for each download package (using an OpenPGP key). The corresponding key can be
downloaded from the homepage: https://www.slikesoft.com/?page_id=111,
the webpage's foaf.rdf-file or from a public key server.
Fingerprint: 90BDC5B9C28EBCAD5805930806DED38809EECFCA
3.1.2 Downloading via SVN
The latest development version can always be acquired directly via our
Subversion® repository at https://www.slikesoft.com/svn/slikenet/.
Released versions are tagged (i.e.
https://www.slikesoft.com/svn/slikenet/tags/) while the main development trunk
is located under https://www.slikenet.com/svn/slikenet/trunk/ .
We suggest you use a Subversion client to get your copy from that repository. A
list of available Subversion clients is located here:
https://subversion.apache.org/packages.html .
3.1.3 Downloading via GIT®
In addition to the main SVN repository, we also provide SLikeNet as a fork of
RakNet on GitHub (https://github.com/SLikeSoft/SLikeNet). If you are mainly
using GIT, this might be the way you wanna got to acquire a copy of SLikeNet.
Note that on GitHub we don't provide the prebuild libraries in the repository
due to the implications of large files inside a GIT repository. If you require
the prebuild binaries you can download these from our webpage (see 3.1.1) or
from the release page on GitHub as separate download packages.
3.2 Using SLikeNet on Windows
3.2.1 Using prebuilt SLikeNet libraries with Microsoft Visual Studio
Following is a step-by-step instruction on how to set up a C++ project using
the Visual Studio IDE.
1. Right click your project in the Solution explorer -> Properties
2. C/C++ -> General -> Additional Include Directories: add
[SLikeNet]\Source\include
3. Linker -> General -> Additional Library Directories: add
[SLikeNet]\Lib\prebuild\[VS_2010] (where VS_2010 should be replaced with the
version of the IDE being used)
4. Linker -> Input -> Additional Dependencies: add the correct library (see
chapter 3.2.3)
That's all you need to get started using SLikeNet. No additional steps are
required. You won't even have to compile SLikeNet yourself.
3.2.2 Building SLikeNet yourself with Microsoft Visual Studio
If you need a special configuration which we don't provide or if you simply
want to build SLikeNet yourself:
1. Open SLikeNet.sln with Visual Studio
2. VS2010: skip this step
VS2012: Select "Update" in the pop-up dialog: "Update VC++ Compiler and
Libraries"
VS2013/VS2015: Select "OK" in the pop-up dialog: "Upgrade VC++ Compiler and
Libraries"
VS2017: Select "OK" in the pop-up dialog: "Retarget Projects"
3. Adjust NativeFeatureIncludesOverrides.h and define any optional macros to
enable (or disable) certain features
4. Select the correct configuration (Debug, Release, or Retail; with or without
Unicode support) and the correct machine type (Win32 or x64)
5. Build the appropriate project:
- DLL: to build SLikeNet as a dynamic link library
- LibStatic: to build SLikeNet as a static library
See chapter 3.4 if you want to build SLikeNet for an in-place replacement of
RakNet.
3.2.3 Provided default libraries
We ship several libraries which can be used without having to compile SLikeNet
yourself. The prebuilt libraries are located under
[SLikeNet]/Lib/prebuild/[VS_2010].
VS_2010 corresponds to the Visual Studio version the contained libraries have
been built with/for.
The naming scheme follows the following pattern:
SLikeNet libraries: SLikeNet(_DLL)_[Debug|Release|Retail]( - Unicode)_[core|ext]_[Win32|x64]
RakNet compatibility libraries RakNet(_DLL)_[Debug|Release|Retail]_[core|ext]_[Win32|x64]
_DLL indicates the library is built as a dynamic link library. The absence of
_DLL indicates that it's a static library.
Debug|Release|Retail correspond to the configuration (see chapter 3.5.2 for
details).
"- Unicode" indicates the library is built with the Unicode character set. We
do not provide this configuration by default with the RakNet compatibility
mode, since RakNet did not provide such configuration.
Following the "- Unicode" marker is either the _core or _ext (for extended)
marker. A core configuration is built with the bare minimum settings for
SLikeNet which means: no ipv6, no OpenSSL, and no LIBCAT support. The extended
configuration is built with these three features enabled.
The last marker indicates whether it's a 32-bit (Win32) or a 64-bit (x64)
library.
3.3 Using SLikeNet with Linux and OSX
3.3.1 Building SLikeNet
To build SLikeNet on Linux or OSX, you need a supported version of CMake and a
supported compiler version. See chapter 2.2 for a list of what is supported.
1. Create a directory which you will use as the root-directory for SLikeNet (we
refer to that directory as [SLikeNetRootDirectory])
2. Extract the SLikeNet package to [SLikeNetRootDirectory]/source
3. Adjust [SLikeNetRootDirectory]/source/Source/NativeFeatureIncludesOverrides.h
and define any optional macros to enable (or disable) certain features
4. Create a new directory: [SLikeNetRootDirectory]/cmake
5. Change the directory to [SLikeNetRootDirectory]/cmake
6. Run cmake ../source
7. Run make
This will build SLikeNet as a static as well as the shared object library.
3.4 RakNet compatibility mode
3.4.1 Migrating from RakNet to SLikeNet
SLikeNet provides a simple way to migrate from RakNet to SLikeNet. All you need
to do is to make sure that your project defines RAKNET_COMPATIBILITY in
defineoverrides.h, redirect your include and library folders to the SLikeNet
ones (see chapter 3.2.1 for how this is done with Visual Studio), adjust the
.lib file name, and rebuild your game/application without further
modifications.
Note that you can also continue pointing your include directory to
[SLikeNet]/Source (instead of [SLikeNet]/Source/include as it is described in
chapter 3.2.1). That way you can more easily switch between RakNet and SLikeNet
if you need to.
3.4.2 Building RakNet compatibility mode yourself
If you want to build SLikeNet in RakNet compatibility mode yourself on Windows,
follow the steps described in chapter 3.2.2 and build the corresponding project
listed under RakNet_Backwards_Compatibility in the SLikeNet solution.
Note that at the moment SLikeNet only provides building the RakNet
compatibility mode on Windows.
3.4.3 In-place replacement of RakNet
A very handy way to give SLikeNet a try is to simply replace the DLL of your
application with the corresponding one provided by SLikeNet. You can find the
DLLs under [SLikeNet]/Lib/prebuild/[VS_2010]. Replace your existing DLL with
the SLikeNet version and start your application. If everything goes well, your
game/application will start and run without any issues and no further changes
required.
Since the protocol was kept compatible with RakNet, you can even run the server
using RakNet and the client(s) running SLikeNet (or vice versa).
This also works for C# projects. See 3.7.2 for details.
3.5 Development notes on differences between RakNet and SLikeNet
3.5.1 General notes
There are a couple of differences between RakNet and SLikeNet when it comes to
using the libraries which are noteworthy:
1. (except for RakNet compatibility mode) You should include SLikeNet headers
via <slikenet/foobar.h> where RakNet required you to include only
<foobar.h>.
2. (except for RakNet compatibility mode) You need to use the SLNet namespace
where previously you used the RakNet namespace.
3. RAKNET_VERSION, RAKNET_VERSION_NUMBER, RAKNET_VERSION_NUMBER_INT, and
RAKNET_DATE were kept due to backwards compatibility with RakNet but were
updated to 4.082 and 7/26/2017 respectively and will stay at these values
for all SLikeNet 0.x.x/1.x.x releases.
In order to distinguish between different SLikeNet versions, you should use
the newly introduced SLIKENET_VERSION, SLIKNET_VERSION_NUMBER,
SLIKENET_VERSION_NUMBER_INT, and SLIKNET_DATE macros.
3.5.2 Retail configuration
RakNet only shipped with a debug and a release configuration while SLikeNet
ships with 3 different configurations: debug, release, and retail.
The debug configuration provides full debugging support without any kind of
optimization. The focus of this configuration lies in debugging capabilities
(and not on performance). This is in principle the same what RakNet provided.
The release configuration provides partial debugging mode with optimizations
but configured so it's usable for larger games. In particular the whole program
optimization (WPO) and link time code generation (LTCG) is disabled (since this
can significantly increase build times on larger projects).
The retail configuration is the configuration intended to be used when building
the versions which will be shipped to users/customers. It's configured to
provide the best performance and no debugging overhead whatsoever. WPO and LTCG
are enabled in this configuration too.
To use the retail configuration you also need to define the _RETAIL macro
(usually you'd do that via the project properties).
Note that the RakNet 4.081/4.082 configurations were a bit inconsistent. By
default the release configuration for RakNet DLL was built with WPO/LTCG
enabled while for RakNet Static it was disabled. So if you want to use the
corresponding SLikeNet libraries for what RakNet used as the release