1
0
mirror of https://github.com/solemnwarning/directplay-lite synced 2024-12-30 16:45:37 +01:00

62 Commits

Author SHA1 Message Date
Daniel Collins
780a37965b Implement IDirectPlay8Peer::GetLocalHostAddresses() method 2018-10-21 21:17:01 +01:00
Daniel Collins
b04735e8ea Don't crash if IDirectPlay8Peer::Host() is passed a NULL session name. 2018-10-21 20:50:35 +01:00
Daniel Collins
d9c78f14bf Delete obsolete Makefile 2018-10-17 00:07:10 +01:00
Daniel Collins
5ccf66fceb Implement cancelling of queued asynchronous sends. 2018-10-16 23:25:08 +01:00
Daniel Collins
5c8f19d5a8 Log failures in hookdll 2018-10-16 13:48:51 +01:00
Daniel Collins
dd6488969e Track and wait for synchronous EnumHosts() calls in Close() 2018-10-16 13:23:48 +01:00
Daniel Collins
0239e5357d Add missing lock uses in DirectPlay8Peer 2018-10-16 13:13:45 +01:00
Daniel Collins
9fc69d67ea Remove code duplication in disconnect/cleanup paths. 2018-10-15 18:13:10 +01:00
Daniel Collins
b74b018ff2 Implement IDirectPlay8Peer::TerminateSession() 2018-10-15 13:29:07 +01:00
Daniel Collins
b44689b38f Implement IDirectPlay8Peer::DestroyPeer() 2018-10-14 17:41:57 +01:00
Daniel Collins
7723fc04e3 Implement player enumeration in IDirectPlay8Peer::EnumPlayersAndGroups() 2018-10-14 13:42:07 +01:00
Daniel Collins
c88355efb9 DirectPlay8Peer: Support cancelling in-progress connections. 2018-10-14 11:18:56 +01:00
Daniel Collins
f753f42d44 Allocate async handles correctly. 2018-10-14 01:06:00 +01:00
Daniel Collins
56ab6ea75a Destroy local player is connecting to a peer fails. 2018-10-12 16:41:49 +01:00
Daniel Collins
1b16624577 Handle IDirectPlay8Peer::Close() being called by the host. 2018-10-12 10:14:20 +01:00
Daniel Collins
e7f5d0f68d Proper implementation of IDirectPlay8Peer::Close() 2018-10-11 12:26:20 +01:00
Daniel Collins
61e8d23da8 Don't leak peer sockets and handle I/O errors on them. 2018-10-06 22:06:05 +01:00
Daniel Collins
fffbfe3ce4 Don't poll for TCP recv() events when processing one.
Clearing FD_RECV and FD_CLOSE from the event flags when processing a
recv() event will prevent the other worker threads associated with that
socket from waking up repeatedly, checking recv_busy, then sleeping
without having done anything, wasting time and potentially preventing
them from servicing their other sockets.
2018-10-06 14:07:51 +01:00
Daniel Collins
f000152a7a Fix message ordering race in IDirectPlay8Peer::SetPeerInfo()
Ensure the DPNMSG_ASYNC_OP_COMPLETE message is always dispatched after
the local DPLITE_MSGID_PLAYERINFO message.
2018-10-06 14:02:51 +01:00
Daniel Collins
8db9aa277f Maintain worker_pool only when DirectPlay8Peer is initialised.
This ensures any worker threads have stopped by the time we finish
returning to STATE_NEW when closing.
2018-10-06 10:53:25 +01:00
Daniel Collins
818adcbba1 Connect non-host peers in sessions together. 2018-10-05 19:26:05 +01:00
Daniel Collins
a91ded1268 Allow connecting to "IPX" addresses. 2018-10-03 23:28:47 +01:00
Daniel Collins
551cbcf43c Include Wine DirectPlay headers rather than needing the DX SDK. 2018-10-03 23:21:02 +01:00
Daniel Collins
d2bd2bc85a Tweak debug logging. 2018-10-03 21:35:23 +01:00
Daniel Collins
b1289366be Address handling improvements.
- IDirectPlay8Peer::EnumHosts() requires a device address to specify
  the service provider to emulate.

- IDirectPlay8Peer::EnumHosts() allows overriding the address/port
  that discovery messages are sent to.

- IDirectPlay8Peer::Host() requires at least one address. Addresses
  with different service providers are not supported yet.

- Implement IDirectPlay8Peer::GetPeerAddress() method.

- Populate pAddressSender in DPNMSG_ENUM_HOSTS_QUERY message.

- Popupate pAddressPlayer in DPNMSG_INDICATE_CONNECT message.

- Base host addresses created by IDirectPlay8Peer on service provider
  of device address given to Host() method.
2018-10-03 21:21:56 +01:00
Daniel Collins
f8ee41f365 Implement basic logging functions, do some TODOs. 2018-10-02 00:46:05 +01:00
Daniel Collins
8b70fea3bc Finish implementation of (Get|Set)ApplicationDesc() 2018-10-01 23:03:33 +01:00
Daniel Collins
f5c660f22a Copy values for DPN_APPLICATION_DESC between peers. 2018-09-30 19:45:57 +01:00
Daniel Collins
d4d0c2f64a Use same host enumeration parameters as DirectX. 2018-09-29 19:59:38 +01:00
Daniel Collins
f150264c93 Implement IDirectPlay8Peer::GetSPCaps() and SetSPCaps() 2018-09-29 19:56:47 +01:00
Daniel Collins
82a8842fa0 Implement IDirectPlay8Peer::GetCaps() and SetCaps() 2018-09-29 19:31:01 +01:00
Daniel Collins
c2a3b51c9d Implement IDirectPlay8Peer::EnumServiceProviders() 2018-09-29 19:00:45 +01:00
Daniel Collins
2b1a0fb687 Exchange peer information between host/peer. 2018-09-27 22:56:36 +01:00
Daniel Collins
6b8d3eab9b HostEnumerator: Populate host address port correctly. 2018-09-27 22:22:56 +01:00
Daniel Collins
ca6184b1c9 DirectPlay8Address: Convert ANSI strings to Unicode. 2018-09-27 22:05:38 +01:00
Daniel Collins
f19678217f SendTo() support for DPNID_ALL_PLAYERS_GROUP, DPNSEND_NOLOOPBACK. 2018-09-24 21:43:25 +01:00
Daniel Collins
2635fd04cd Initial SetPeerInfo() and SetPeerInfo() implementations.
Doesn't copy between peers and only allows fetching local player info
at this time.
2018-09-24 21:40:34 +01:00
Daniel Collins
c28f880fee Initial prototype of a hook DLL (ddraw.dll) 2018-09-23 15:43:15 +01:00
Daniel Collins
45b4fd19bd Basic message sending. 2018-09-21 01:03:49 +01:00
Daniel Collins
e8fdf2ecb1 Simple SendTo tests 2018-09-20 22:51:54 +01:00
Daniel Collins
25341f2488 Milestone: Connect a single peer! 2018-09-20 00:58:41 +01:00
Daniel Collins
98b37cf76c WIP: DirectPlay8Peer::Connect() tests
Currently being developed against real DirectPlay to be a baseline.
2018-09-17 23:18:49 +01:00
Daniel Collins
da3cd1a55f Use HandleHandlingPool to run DirectPlay8Peer worker threads. 2018-09-15 23:24:54 +01:00
Daniel Collins
f06f219d61 Implement HandleHandlingPool class.
This will run all the main I/O threads in DirectPlay8Peer, only
the host enumeration will be outside of it at this time.
2018-09-15 21:38:01 +01:00
Daniel Collins
26c038a24d Build with Visual Studio toolchain rather than GCC.
I want C++17 features :(
2018-09-13 01:42:31 +01:00
Daniel Collins
1dd9e45145 Improve DirectPlay8Peer object management in tests. 2018-09-13 01:40:47 +01:00
Daniel Collins
d10a456883 Fix use of uninitialised memory, leaks. 2018-09-13 01:20:45 +01:00
Daniel Collins
c63945facd Initial prototype of network I/O and session enumeration.
The threading model used for processing messages here will need
redesigning; we can't allow the application to block the event loop
when processing a message in case it calls something which won't
return until a message is processed.

Final model will probably use a pool of workers which will handle I/O
one-at-a-time, blocking and allowing other threads to deal with the
I/O when in the application message callback.
2018-09-11 22:09:27 +01:00
Daniel Collins
286c86ea46 Implement serialising of GUIDs in packets. 2018-09-11 21:53:27 +01:00
Daniel Collins
971119edae Implement low-level packet (de)serialisation code.
The protocol is going to use TLV messages, containing zero or more
fields represented using the same TLV header. Functions for
(de)serialising DirectPlay message structures will be built on top of
these classes.
2018-09-02 13:02:20 +01:00