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