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

86 Commits

Author SHA1 Message Date
Daniel Collins
1837aa1915 Misc. fixes
- Honour DPNSEND_NOCOMPLETE flag to IDirectPlay8Peer::SendTo()

- Allow calling IDirectPlay8Peer::GetGroupInfo() in more states
  so that it can be called when processing DPNMSG_GROUP_CREATE
  during connection.

- Don't buffer log messages.
2018-11-14 01:33:35 +00:00
Daniel Collins
e1b51c22b1 IDirectPlay8Peer: Allow non-host peers to create groups. 2018-11-12 21:16:07 +00:00
Daniel Collins
7c75bf7f9b IDirectPlay8Peer: Implement SendTo() on groups. 2018-11-11 14:44:10 +00:00
Daniel Collins
9c1345f44a IDirectPlay8Peer: Randomly select dynamic ports in Connect() method.
It turns out disabling SO_LINGER on Windows doesn't /really/ make the
socket go away by the time closesocket() returns, just very shortly
afterwards, so rapidly destroying and re-creating connections on a slow
machine can fail due to a connect() address conflict.
2018-11-10 22:37:02 +00:00
Daniel Collins
6df47cee60 Handle group cleanups for session end etc 2018-11-10 21:34:31 +00:00
Daniel Collins
e8e35c1c45 IDirectPlay8Peer: Added more group tests based on reference behaviour. 2018-11-09 15:24:22 +00:00
Daniel Collins
5297110b12 IDirectPlay8Peer: Implement RemovePlayerFromGroup() 2018-11-09 10:34:54 +00:00
Daniel Collins
d68ba86da9 DirectPlay8Peer: Implement AddPlayerToGroup() and EnumGroupMembers() 2018-11-09 00:59:12 +00:00
Daniel Collins
89a3174ecd IDirectPlay8Peer: Implement explicit group destruction.
Still TODO: Automatic destruction on disconnect.
2018-11-09 00:59:02 +00:00
Daniel Collins
2149caef53 IDirectPlay8Peer: Implement group creation and enumeration. 2018-11-08 21:51:04 +00:00
Daniel Collins
7cfb9b3a5a Extended IDirectPlay8Peer group tests.
- IDirectPlay8Peer::DestroyGroup()

- IDirectPlay8Peer::RemovePlayerFromGroup()

- IDirectPlay8Peer::GetGroupInfo()

- IDirectPlay8Peer::GetGroupContext()
2018-11-08 01:07:48 +00:00
Daniel Collins
3b1e6d8b5e Send guaranteed messages in soak/performance test. 2018-11-07 09:04:41 +00:00
Daniel Collins
a7a6a4a0da Implement tests for CreateGroup() and AddPlayerToGroup()
They pass against DirectX, if not my code yet.
2018-11-06 23:53:33 +00:00
Daniel Collins
21c5340793 Run client soak test in phases 2018-11-01 09:07:41 +00:00
Daniel Collins
5c44ce26e0 Send messages and track statistics in soak test. 2018-10-31 23:31:25 +00:00
Daniel Collins
f3a3533660 Allow calling IDirectPlay8Peer::SendTo() during connection.
DirectX allows this.
2018-10-31 23:16:12 +00:00
Daniel Collins
685a6c27cf Initial implementation of soak test client side. 2018-10-28 15:47:47 +00:00
Daniel Collins
988ea0c3b6 Initial implementation of soak testing framework 2018-10-28 14:00:20 +00:00
Daniel Collins
44423f4596 Avoid spinning the workers whenever a peer is connected.
Calling WSAEventSelect() causes the event to become signalled
even if there is nothing new, probably due to the socket being
writable.

Due to this, io_peer_recv() signals the event object whenever
claiming recv_busy just to check for pending data, and again
when releasing it, which leads to another worker immediately
waking up and claiming it to check for new messages, starting
the cycle again.

Only claim recv_busy and mask FD_RECV events if some data is
actually read from the socket.
2018-10-24 00:57:09 +01:00
Daniel Collins
14c78e506b Raise maximum packet size.
The documentation for IDirectPlay8Peer::SendTo() makes no
mention of message size limits, so this may need more attention
if games are sending even bigger messages to each other.
2018-10-24 00:54:41 +01:00
Daniel Collins
56772c9813 Build dsound hook DLL. 2018-10-23 22:04:34 +01:00
Daniel Collins
8ffad7fbdd Fix logging. 2018-10-23 22:04:06 +01:00
Daniel Collins
4b962954ef Release lock when dispatching DPNMSG_CREATE_PLAYER in IDirectPlay8::Host() 2018-10-23 22:03:18 +01:00
Daniel Collins
a5ff5b9a09 Build dpnet.dll 2018-10-21 21:17:06 +01:00
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