1 September 28, 2005 |
|
2 ------------------ |
|
3 |
|
4 Compared to the previous official snapshot (November 2004) the |
|
5 current version of oscpack includes a re-written set of network |
|
6 classes and some changes to the syntax of the networking code. It no |
|
7 longer uses threads, which means that you don't need to use sleep() |
|
8 if you are writing a simple single-threaded server, or you need to |
|
9 spawn your own threads in a more complex application. |
|
10 |
|
11 The list below summarises the changes if you are porting code from |
|
12 the previous release. |
|
13 |
|
14 - there are no longer any threads in oscpack. if you need to |
|
15 set up an asynchronous listener you can create your own thread |
|
16 and call Run on an instance of SocketReceiveMultiplexer or |
|
17 UdpListeningReceiveSocket (see ip/UdpSocket.h) yourself. |
|
18 |
|
19 - host byte order is now used for network (IP) addresses |
|
20 |
|
21 - functions which used to take two parameters <address, port> |
|
22 now take an instance of IpEndpointName (see |
|
23 ip/IpEndpointName.h) this class has a number of convenient |
|
24 constructors for converting numbers and strings to internet |
|
25 addresses. For example there is one which takes a string and |
|
26 another that take the dotted address components as separate |
|
27 parameters. |
|
28 |
|
29 - The UdpTransmitPort class, formerly in UdpTransmitPort.h, is |
|
30 now called UdpTransmitSocket, which is simply a convenience |
|
31 class derived from UdpSocket (see ip/UdpSocket.h). Where you |
|
32 used to use the constructor UdpTransmitPort( address, port) now |
|
33 you can use UdpTransmitSocket( IpEndpointName( address, port ) |
|
34 ) or you can any of the other possible ctors to IpEndpointName |
|
35 () (see above). The Send() method is unchanged. |
|
36 |
|
37 - The packet listener base class is now located in |
|
38 ip/PacketListener.h instead of PacketListenerPort.h. The |
|
39 ProcessPacket method now has an additional parameter indicating |
|
40 the remote endpoint |
|
41 |
|
42 - The preferred way to set up listeners is with |
|
43 SocketReceiveMultiplexer (in ip/UdpSocket.h), this also allows |
|
44 attaching periodic timers. For simple applications which only |
|
45 listen to a single socket with no timers you can use |
|
46 UdpListeningReceiveSocket (also in UdpSocket.h) See |
|
47 osc/OscReceiveTest.cpp or osc/OscDump.cpp for examples of this. |
|
48 This is more or less equivalent to the UdpPacketListenerPort |
|
49 object in the old oscpack versions except that you need to |
|
50 explicitly call Run() before it will start receiving packets |
|
51 and it runs in the same thread, not a separate thread so Run() |
|
52 won't usually return. |
|
53 |
|
54 - Explicit calls to InitializeNetworking() and |
|
55 TerminateNetworking() are no longer required for simple |
|
56 applications (more complex windows applications should |
|
57 instantiate NetworkInitializer in main() or WinMain (see |
|
58 ip/NetworkingUtils.h/.cpp) |
|
59 |
|
60 - The OscPacketListener base class (OscPacketListener.h) was |
|
61 added to make traversing OSC packets easier, it handles bundle |
|
62 traversal automatically so you only need to process messages in |
|
63 your derived classes. |
|
64 |
|
65 - On Windows be sure to link with ws2_32.lib or you will see |
|
66 a linker error about WSAEventSelect not being found. Also you |
|
67 will need to link with winmm.lib for timeGetTime() |
|
68 |
|