* fix: Update namespaces to latest MLAPI develop and fix asmdef reference

* fix for C# diff with unity beta 6

* photon update

* feat: update litnetlib to latest Transport API

* chore: Remove old commented code

* Update photon transport to latest API changes.

- Remove channels

* update template transport

* update facepunch (#104)

* update ruffles (#107)

* update websocket (#106)

* update steamp2p (#105)

* update photon realtime (#108)

* update photon

* make connect async

* define payload out param as default

* update enet (#103)

* update enet

* Add changelog bump package version

* remove sockettask api

* reduce channel count to 1 and add comment explaining it

* update litenetlib (#110)

* update litenetlib

* remove sockettask API

* Update extensions package (#102)

* feat!: remove NetworkRigidbody as there is now a solution in the core package

* update lag compensation

* update discovery and hud. Don't work yet because UnityTransport does not expose read access to ip/port

* update pool

* remove patcher

* update namespaces

* rename extensions package folder

* update repository documentation (#109)

Co-authored-by: Samuel Bellomo <samuel.bellomo@unity3d.com>
Co-authored-by: Valere91Unity <valere.plantevin@unity3d.com>
Co-authored-by: Valere Plantevin <89042540+VALERE91Unity@users.noreply.github.com>
This commit is contained in:
Luke Stampfli 2021-10-21 14:19:04 +01:00 коммит произвёл GitHub
Родитель 2583c66903
Коммит b32ffdd464
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
776 изменённых файлов: 837 добавлений и 2141 удалений

Просмотреть файл

@ -1 +1 @@
The multiplayer-community-contributions repository follows the same code of conduct as the Netcode for GameObjects repository. Please read the [Netcode for GameObjects code of conduct](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/master/CODE_OF_CONDUCT.md), thank you!
The multiplayer-community-contributions repository follows the same code of conduct as the Netcode for GameObjects repository. Please read the [Netcode for GameObjects code of conduct](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/main/CODE_OF_CONDUCT.md), thank you!

Просмотреть файл

@ -12,7 +12,7 @@ Here are our guidlines for contributing:
## <a name="coc"></a> Code of Conduct
Please help us keep Unity Multiplayer Networking open and inclusive. Read and follow our [Code of Conduct](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/master/CODE_OF_CONDUCT.md).
Please help us keep Unity Multiplayer Networking open and inclusive. Read and follow our [Code of Conduct](https://github.com/Unity-Technologies/com.unity.netcode.gameobjects/blob/main/CODE_OF_CONDUCT.md).
## <a name="ways"></a> Ways to Contribute
@ -27,13 +27,13 @@ If you would like to add new content to the contributions repository or improve
#### Creating a new Netcode for GameObjects Transport
- Clone the multiplayer-community-contributions repository
- Copy the com.mlapi.contrib.transport.template folder
- Copy the com.community.netcode.transport.template folder
- Rename the folder to better reflect your transport's name.
- Update CHANGELOG.md, package.json, README.md with information about your transport
- Rename TemplateTransport.cs and implement your transport. Rename the .asmdef file to the name of your transport as well.
- If your transport needs any additional user actions to run please specific them in README.md
#### Adding an extension to the com.mlapi.contrib.extensions package
#### Adding an extension to the com.community.netcode.extensions package
- Create a new folder in the extension's package runtime folder.
- Add your code to the folder.
- Put a short README.md into the folder explaining what your extension does and how to use it.

Просмотреть файл

@ -4,7 +4,7 @@ The Multiplayer Community Contributions repository contains extensions provided
[Installing a Community Transport (Netcode for GameObjects)](/Transports/README.md)
[Installing the Community Extensions Package (Netcode for GameObjects)](/com.mlapi.contrib.extensions/README.md)
[Installing the Community Extensions Package (Netcode for GameObjects)](/com.community.netcode.extensions/README.md)
### Community and Feedback
For general questions, networking advice or discussions about Unity Multiplayer Networking or Netcode for GameObjects, please join our [Discord Community](https://discord.gg/FM8SE9E) or create a post in the [Unity Multiplayer Forum](https://forum.unity.com/forums/multiplayer.26/).
@ -12,7 +12,7 @@ For general questions, networking advice or discussions about Unity Multiplayer
### Maintenance
The contributions repository is a community repository and not an official Unity product. What this means is:
- We will accept new content and bug fixes and try to keep the content in this repository up to date.
- We do not guarantee that any of the content in this repository will be supported by future MLAPI versions.
- We do not guarantee that any of the content in this repository will be supported by future Netcode for GameObjects versions.
- We ask the community and authors to maintain the content in this repository. Unity is not responsible for fixing bugs in community content.
### Adding new content
@ -21,29 +21,26 @@ Check our [contribution guidelines](CONTRIBUTING.md) for information on how to c
### Existing Content
#### Transports
| **Name** | **Platforms** | **Version Specifics** | **0.1.0** | **v12** |
|:------------:|:---------:|:-------------:|:-------:|:---:|
| **[Ruffles](/Transports/com.mlapi.contrib.transport.ruffles)**| Desktop, Mobile | | :heavy_check_mark: | :heavy_check_mark: |
|**[Enet](/Transports/com.mlapi.contrib.transport.enet)**| Desktop, Mobile\* | |:heavy_check_mark: | :heavy_check_mark: |
|**[LiteNetLib](/Transports/com.mlapi.contrib.transport.litenetlib)**| Desktop, Mobile | | :heavy_check_mark: | :heavy_check_mark: |
|**[SteamP2P](/Transports/com.mlapi.contrib.transport.steamp2p)**| Steam || :heavy_check_mark: | :heavy_check_mark: |
|**[WebSocket](/Transports/com.mlapi.contrib.transport.websocket)**| Desktop, Mobile, WebGL\** | | :heavy_check_mark:||
|**[Photon Realtime](/Transports/com.mlapi.contrib.transport.photon-realtime)**| Desktop, Mobile, WebGL\*** || :heavy_check_mark: | |
|**[Facepunch](/Transports/com.mlapi.contrib.transport.facepunch)**| Steam || :heavy_check_mark: | :heavy_check_mark: |
| **Name** | **Platforms** | **1.0.0** | **0.1.0** | **v12** |
|:------------:|:---------:|:-------:|:-------:|:---:|
| **[Ruffles](/Transports/com.community.netcode.transport.ruffles)**| Desktop, Mobile | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|**[Enet](/Transports/com.community.netcode.transport.enet)**| Desktop, Mobile\* | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|**[LiteNetLib](/Transports/com.community.netcode.transport.litenetlib)**| Desktop, Mobile | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|**[SteamP2P](/Transports/com.community.netcode.transport.steamp2p)**| Steam | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
|**[WebSocket](/Transports/com.community.netcode.transport.websocket)**| Desktop, Mobile, WebGL | :heavy_check_mark: | :heavy_check_mark:||
|**[Photon Realtime](/Transports/com.community.netcode.transport.photon-realtime)**| Desktop, Mobile, WebGL\** | :heavy_check_mark: | :heavy_check_mark: | |
|**[Facepunch](/Transports/com.community.netcode.transport.facepunch)**| Steam | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
\* Needs manual binary compilation.<br>
\** MLAPI 0.1.0 does currently not support building for WebGL. A version of the `develop` branch has to be used.<br>
\*** Other platforms such as console platforms are also supported but require communication with Exit Games.
\** Other platforms such as console platforms are also supported but require communication with Exit Games.
#### Extensions
| **Name** | **Version Specifics** | **0.1.0** | **v12** |
| **Name** | 1.0.0 | **0.1.0** | **v12** |
|:------------:|:-------------:|:-------:|:---:|
|**[LagCompensation](/com.mlapi.contrib.extensions/Runtime/LagCompensation)**| | :heavy_check_mark: | |
|**[NetworkObjectPool](/com.mlapi.contrib.extensions/Runtime/NetworkObjectPool)**| | :heavy_check_mark: | |
|**[NetworkManagerHud](/com.mlapi.contrib.extensions/Runtime/NetworkManagerHud)**| | :heavy_check_mark: | |
|**[NetworkRigidbody](/com.mlapi.contrib.extensions/Runtime/NetworkRigidbody)**| | :heavy_check_mark: | |
|**[NetworkRigidbody2D](/com.mlapi.contrib.extensions/Runtime/NetworkRigidbody2D)**| | :heavy_check_mark: | |
|**[NetworkDiscovery](/com.mlapi.contrib.extensions/Runtime/NetworkDiscovery)**| | :heavy_check_mark: | |
|**[LagCompensation](/com.community.netcode.extensions/Runtime/LagCompensation)**| :heavy_check_mark: | :heavy_check_mark: | |
|**[NetworkObjectPool](/com.community.netcode.extensions/Runtime/NetworkObjectPool)**| :heavy_check_mark: | :heavy_check_mark: | |
|**[NetworkManagerHud](/com.community.netcode.extensions/Runtime/NetworkManagerHud)**| :heavy_check_mark: | :heavy_check_mark: | |
|**[NetworkDiscovery](/com.community.netcode.extensions/Runtime/NetworkDiscovery)**| :heavy_check_mark: | :heavy_check_mark: | |
### Releases
@ -51,4 +48,5 @@ Content for a specifc major version of Netcode for GameObjects can be found in t
exist:
| **Release**|
|:------------:|
| **[v12](https://github.com/Unity-Technologies/MLAPI.Transports/tree/release-v12)**|
| **[v12](https://github.com/Unity-Technologies/multiplayer-community-contributions/tree/release-v12)**|
| **[0.1.0](https://github.com/Unity-Technologies/multiplayer-community-contributions/tree/release-0.1.0)**|

Просмотреть файл

@ -1,7 +1,7 @@
This package contains third-party software components governed by the license(s) indicated below:
---------
## Package: Transports/com.mlapi.contrib.transport.enet
## Package: Transports/com.community.netcode.transport.enet
---------
@ -33,7 +33,7 @@ SOFTWARE.
---------
## Package: Transports/com.mlapi.contrib.transport.litenetlib
## Package: Transports/com.community.netcode.transport.litenetlib
---------
@ -65,7 +65,7 @@ SOFTWARE.
---------
## Package: Transports/com.mlapi.contrib.transport.ruffles
## Package: Transports/com.community.netcode.transport.ruffles
---------
@ -97,7 +97,7 @@ SOFTWARE.
---------
## Package: Transports/com.mlapi.contrib.transport.steamp2p
## Package: Transports/com.community.netcode.transport.steamp2p
---------
@ -129,7 +129,7 @@ THE SOFTWARE.
---------
## Package: Transports/com.mlapi.contrib.transport.photon-realtime
## Package: Transports/com.community.netcode.transport.photon-realtime
---------
@ -166,7 +166,7 @@ USE OF THE MATERIALS IN THIS FILE.
---------
## Package: Transports/com.mlapi.contrib.transport.websocket
## Package: Transports/com.community.netcode.transport.websocket
---------

Просмотреть файл

@ -0,0 +1,13 @@
# Changelog
All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
## 2.0.0
### Changed
- Targets the Netcode for GameObjects 1.0.0 package.
### Removed
- Removed support for channels.
## 1.0.0
First version of the Enet transport as a Unity package.

Просмотреть файл

@ -1,14 +1,13 @@
using System;
using System.Collections.Generic;
using ENet;
using MLAPI.Transports;
using MLAPI.Transports.Tasks;
using Unity.Netcode;
using Unity.Profiling;
using UnityEngine;
using Event = ENet.Event;
using EventType = ENet.EventType;
namespace MLAPI.Transports.Enet
namespace Netcode.Transports.Enet
{
[DefaultExecutionOrder(1000)]
public class EnetTransport : NetworkTransport
@ -31,28 +30,13 @@ namespace MLAPI.Transports.Enet
static ProfilerMarker s_Flush =
new ProfilerMarker("Enet.Flush");
#endif
[Serializable]
public struct EnetChannel
{
[HideInInspector]
public byte Id;
public EnetDelivery Delivery;
}
public enum EnetDelivery
{
UnreliableSequenced,
ReliableSequenced,
Unreliable
}
public override bool IsSupported => Application.platform != RuntimePlatform.WebGLPlayer;
public ushort Port = 7777;
public string Address = "127.0.0.1";
public int MaxClients = 100;
public List<EnetChannel> Channels = new List<EnetChannel>();
public int MessageBufferSize = 1024 * 5;
[Header("ENET Settings")]
@ -65,33 +49,26 @@ namespace MLAPI.Transports.Enet
// Runtime / state
private byte[] messageBuffer;
private WeakReference temporaryBufferReference;
private readonly Dictionary<uint, Peer> connectedEnetPeers = new Dictionary<uint, Peer>();
private readonly Dictionary<NetworkChannel, byte> channelNameToId = new Dictionary<NetworkChannel, byte>();
private readonly Dictionary<byte, NetworkChannel> channelIdToName = new Dictionary<byte, NetworkChannel>();
private readonly Dictionary<byte, EnetChannel> internalChannels = new Dictionary<byte, EnetChannel>();
private Host host;
private uint serverPeerId;
private SocketTask connectTask;
private bool hasServiced;
public override ulong ServerClientId => GetMLAPIClientId(0, true);
public override void Send(ulong clientId, ArraySegment<byte> data, NetworkChannel channel)
public override void Send(ulong clientId, ArraySegment<byte> data, NetworkDelivery delivery)
{
Packet packet = default(Packet);
Packet packet = default;
packet.Create(data.Array, data.Offset, data.Count, PacketFlagFromDelivery(internalChannels[channelNameToId[channel]].Delivery));
packet.Create(data.Array, data.Offset, data.Count, NetworkDeliveryToPacketFlag(delivery));
GetEnetConnectionDetails(clientId, out uint peerId);
connectedEnetPeers[peerId].Send(channelNameToId[channel], ref packet);
connectedEnetPeers[peerId].Send(0, ref packet);
}
public void Update()
@ -106,7 +83,7 @@ namespace MLAPI.Transports.Enet
#endif
}
public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel channel, out ArraySegment<byte> payload, out float receiveTime)
public override NetworkEvent PollEvent(out ulong clientId, out ArraySegment<byte> payload, out float receiveTime)
{
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_PollEvent.Begin();
@ -125,7 +102,6 @@ namespace MLAPI.Transports.Enet
if (hasServiced || host.Service(0, out @event) <= 0)
{
clientId = 0;
channel = 0;
payload = new ArraySegment<byte>();
receiveTime = Time.realtimeSinceStartup;
@ -151,7 +127,6 @@ namespace MLAPI.Transports.Enet
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Connect.Begin();
#endif
channel = 0;
payload = new ArraySegment<byte>();
receiveTime = Time.realtimeSinceStartup;
@ -159,13 +134,6 @@ namespace MLAPI.Transports.Enet
@event.Peer.PingInterval(PingInterval);
@event.Peer.Timeout(TimeoutLimit, TimeoutMinimum, TimeoutMaximum);
if (connectTask != null)
{
connectTask.Success = true;
connectTask.IsDone = true;
connectTask = null;
}
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Connect.End();
#endif
@ -176,18 +144,10 @@ namespace MLAPI.Transports.Enet
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Disconnect.Begin();
#endif
channel = 0;
payload = new ArraySegment<byte>();
receiveTime = Time.realtimeSinceStartup;
connectedEnetPeers.Remove(@event.Peer.ID);
if (connectTask != null)
{
connectTask.Success = false;
connectTask.IsDone = true;
connectTask = null;
}
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Disconnect.End();
#endif
@ -198,7 +158,6 @@ namespace MLAPI.Transports.Enet
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Receive.Begin();
#endif
channel = channelIdToName[@event.ChannelID];
receiveTime = Time.realtimeSinceStartup;
int size = @event.Packet.Length;
@ -236,7 +195,6 @@ namespace MLAPI.Transports.Enet
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_Timeout.Begin();
#endif
channel = 0;
payload = new ArraySegment<byte>();
receiveTime = Time.realtimeSinceStartup;
@ -252,7 +210,6 @@ namespace MLAPI.Transports.Enet
#if DEVELOPMENT_BUILD || UNITY_EDITOR
s_NoEvent.Begin();
#endif
channel = 0;
payload = new ArraySegment<byte>();
receiveTime = Time.realtimeSinceStartup;
#if DEVELOPMENT_BUILD || UNITY_EDITOR
@ -270,40 +227,36 @@ namespace MLAPI.Transports.Enet
}
}
public override SocketTasks StartClient()
public override bool StartClient()
{
SocketTask task = SocketTask.Working;
host = new Host();
host.Create(1, MLAPI_CHANNELS.Length + Channels.Count);
host.Create(1, 16);
Address address = new Address();
address.Port = Port;
address.SetHost(Address);
Peer serverPeer = host.Connect(address, MLAPI_CHANNELS.Length + Channels.Count);
Peer serverPeer = host.Connect(address, 1); // Currently Netcode for GameObjects does not use transport level channels.
serverPeer.PingInterval(PingInterval);
serverPeer.Timeout(TimeoutLimit, TimeoutMinimum, TimeoutMaximum);
serverPeerId = serverPeer.ID;
connectTask = task;
return task.AsTasks();
return true;
}
public override SocketTasks StartServer()
public override bool StartServer()
{
host = new Host();
Address address = new Address();
address.Port = Port;
host.Create(address, MaxClients, MLAPI_CHANNELS.Length + Channels.Count);
host.Create(address, MaxClients, 1); // Currently Netcode for GameObjects does not use transport level channels.
return SocketTask.Done.AsTasks();
return true;
}
public override void DisconnectRemoteClient(ulong clientId)
@ -346,91 +299,26 @@ namespace MLAPI.Transports.Enet
Library.Deinitialize();
}
public override void Init()
public override void Initialize()
{
Library.Initialize();
internalChannels.Clear();
channelIdToName.Clear();
channelNameToId.Clear();
connectedEnetPeers.Clear();
// MLAPI Channels
for (byte i = 0; i < MLAPI_CHANNELS.Length; i++)
{
channelIdToName.Add(i, MLAPI_CHANNELS[i].Channel);
channelNameToId.Add(MLAPI_CHANNELS[i].Channel, i);
internalChannels.Add(i, new EnetChannel()
{
Id = i,
Delivery = MLAPINetworkDeliveryToPacketFlag(MLAPI_CHANNELS[i].Delivery)
});
}
// Internal Channels
for (int i = 0; i < Channels.Count; i++)
{
byte id = (byte)(i + MLAPI_CHANNELS.Length);
channelIdToName.Add(id, (NetworkChannel)Channels[i].Id);
channelNameToId.Add((NetworkChannel)Channels[i].Id, id);
internalChannels.Add(id, new EnetChannel()
{
Id = id,
Delivery = Channels[i].Delivery
});
}
messageBuffer = new byte[MessageBufferSize];
}
private PacketFlags PacketFlagFromDelivery(EnetDelivery delivery)
public PacketFlags NetworkDeliveryToPacketFlag(NetworkDelivery delivery)
{
switch (delivery)
return delivery switch
{
case EnetDelivery.UnreliableSequenced:
return PacketFlags.None;
case EnetDelivery.ReliableSequenced:
return PacketFlags.Reliable;
case EnetDelivery.Unreliable:
return PacketFlags.Unsequenced;
default:
return PacketFlags.None;
}
}
public EnetDelivery MLAPINetworkDeliveryToPacketFlag(NetworkDelivery type)
{
switch (type)
{
case NetworkDelivery.Unreliable:
{
return EnetDelivery.Unreliable;
}
case NetworkDelivery.Reliable:
{
// ENET Does not support ReliableUnsequenced.
// https://github.com/MidLevel/MLAPI.Transports/pull/5#issuecomment-498311723
return EnetDelivery.ReliableSequenced;
}
case NetworkDelivery.ReliableSequenced:
{
return EnetDelivery.ReliableSequenced;
}
case NetworkDelivery.ReliableFragmentedSequenced:
{
return EnetDelivery.ReliableSequenced;
}
case NetworkDelivery.UnreliableSequenced:
{
return EnetDelivery.UnreliableSequenced;
}
default:
{
throw new ArgumentOutOfRangeException(nameof(type), type, null);
}
}
NetworkDelivery.Unreliable => PacketFlags.Unsequenced,
NetworkDelivery.Reliable => PacketFlags.Reliable, // ENET csharp Does not support ReliableUnsequenced. https://github.com/MidLevel/MLAPI.Transports/pull/5#issuecomment-498311723
NetworkDelivery.ReliableSequenced => PacketFlags.Reliable,
NetworkDelivery.ReliableFragmentedSequenced => PacketFlags.Reliable,
NetworkDelivery.UnreliableSequenced => PacketFlags.None, // unreliable sequenced according to docs here https://github.com/nxrighthere/ENet-CSharp
_ => throw new ArgumentOutOfRangeException(nameof(delivery), delivery, null)
};
}
public ulong GetMLAPIClientId(uint peerId, bool isServer)

Просмотреть файл

@ -1,8 +1,8 @@
{
"name": "LiteNetLib MLAPI Transport",
"rootNamespace": "MLAPI.Transports.LiteNetLib",
"name": "ENET Transport for Netcode for GameObjects",
"rootNamespace": "Netcode.Transports.Enet",
"references": [
"Unity.Multiplayer.MLAPI.Runtime"
"Unity.Netcode.Runtime"
],
"includePlatforms": [],
"excludePlatforms": [],

Просмотреть файл

@ -0,0 +1,10 @@
{
"name": "com.community.netcode.transport.enet",
"displayName": "ENET Transport for Netcode for GameObjects",
"version": "2.0.0",
"unity": "2019.4",
"description": "ENET Transport for Netcode for GameObjects",
"author": "Albin Corén (transport adapter), Stanislav Denisov (fork and C# wrapper), Lee Salzman (original implementation).",
"dependencies": {
}
}

Просмотреть файл

@ -0,0 +1,15 @@
# Changelog
All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
## 2.0.0
### Changed
- Targets the Netcode for GameObjects 1.0.0 package.
- Renamed namespaces from MLAPI to Netcode.
### Removed
- Removed support for channels.
- No longer send 1 byte of channel information in each message.
## 1.0.0
First version of the Facepunch Transport as a Unity package.

Просмотреть файл

@ -1,4 +1,4 @@
# Facepunch Transport for MLAPI
# Facepunch Transport for Netcode for GameObjects
By **Nico Thomas**, **Floris van Onna**<br>
Credits to **Garry Newman** (Author of Facepunch.Steamworks)

Просмотреть файл

@ -1,26 +1,21 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using MLAPI.Logging;
using MLAPI.Transports.Tasks;
using Steamworks;
using Steamworks.Data;
using Unity.Netcode;
using UnityEngine;
namespace MLAPI.Transports.Facepunch
namespace Netcode.Transports.Facepunch
{
using SocketConnection = Steamworks.Data.Connection;
using SocketConnection = Connection;
public class FacepunchTransport : NetworkTransport, IConnectionManager, ISocketManager
{
private ConnectionManager connectionManager;
private SocketManager socketManager;
private Dictionary<ulong, Client> connectedClients;
private Dictionary<NetworkChannel, SendType> channelSendTypes;
[SerializeField] private List<TransportChannel> channels = new List<TransportChannel>();
[Space]
[Tooltip("The Steam App ID of your game. Technically you're not allowed to use 480, but Valve doesn't do anything about it so it's fine for testing purposes.")]
@ -104,25 +99,22 @@ namespace MLAPI.Transports.Facepunch
return 0;
}
public override void Init()
public override void Initialize()
{
connectedClients = new Dictionary<ulong, Client>();
channelSendTypes = new Dictionary<NetworkChannel, SendType>();
}
foreach (TransportChannel channel in MLAPI_CHANNELS.Concat(channels))
private SendType NetworkDeliveryToSendType(NetworkDelivery delivery)
{
return delivery switch
{
SendType sendType = channel.Delivery switch
{
NetworkDelivery.Reliable => SendType.Reliable,
NetworkDelivery.ReliableFragmentedSequenced => SendType.Reliable,
NetworkDelivery.ReliableSequenced => SendType.Reliable,
NetworkDelivery.Unreliable => SendType.Unreliable,
NetworkDelivery.UnreliableSequenced => SendType.Unreliable,
_ => SendType.Reliable
};
channelSendTypes.Add(channel.Channel, sendType);
}
NetworkDelivery.Reliable => SendType.Reliable,
NetworkDelivery.ReliableFragmentedSequenced => SendType.Reliable,
NetworkDelivery.ReliableSequenced => SendType.Reliable,
NetworkDelivery.Unreliable => SendType.Unreliable,
NetworkDelivery.UnreliableSequenced => SendType.Unreliable,
_ => SendType.Reliable
};
}
public override void Shutdown()
@ -142,54 +134,51 @@ namespace MLAPI.Transports.Facepunch
}
}
public override unsafe void Send(ulong clientId, ArraySegment<byte> data, NetworkChannel networkChannel)
public override unsafe void Send(ulong clientId, ArraySegment<byte> data, NetworkDelivery delivery)
{
if (!channelSendTypes.TryGetValue(networkChannel, out SendType sendType))
if (!channelSendTypes.TryGetValue(NetworkChannel.DefaultMessage, out sendType))
sendType = SendType.Reliable;
var sendType = NetworkDeliveryToSendType(delivery);
byte* buffer = stackalloc byte[data.Count + 1];
byte* buffer = stackalloc byte[data.Count];
fixed (byte* pointer = data.Array)
Buffer.MemoryCopy(pointer + data.Offset, buffer, data.Count, data.Count);
buffer[data.Count] = (byte)networkChannel;
if (clientId == ServerClientId)
connectionManager.Connection.SendMessage((IntPtr)buffer, data.Count + 1, sendType);
connectionManager.Connection.SendMessage((IntPtr)buffer, data.Count , sendType);
else if (connectedClients.TryGetValue(clientId, out Client user))
user.connection.SendMessage((IntPtr)buffer, data.Count + 1, sendType);
user.connection.SendMessage((IntPtr)buffer, data.Count, sendType);
else if (LogLevel <= LogLevel.Normal)
Debug.LogWarning($"[{nameof(FacepunchTransport)}] - Failed to send packet to remote client with ID {clientId}, client not connected.");
}
public override NetworkEvent PollEvent(out ulong clientId, out NetworkChannel networkChannel, out ArraySegment<byte> payload, out float receiveTime)
public override NetworkEvent PollEvent(out ulong clientId, out ArraySegment<byte> payload, out float receiveTime)
{
connectionManager?.Receive();
socketManager?.Receive();
clientId = 0;
networkChannel = default;
receiveTime = Time.realtimeSinceStartup;
payload = default;
return NetworkEvent.Nothing;
}
public override SocketTasks StartClient()
public override bool StartClient()
{
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Starting as client.");
connectionManager = SteamNetworkingSockets.ConnectRelay<ConnectionManager>(targetSteamId);
connectionManager.Interface = this;
return SocketTask.Working.AsTasks();
return true;
}
public override SocketTasks StartServer()
public override bool StartServer()
{
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Starting as server.");
socketManager = SteamNetworkingSockets.CreateRelaySocket<SocketManager>();
socketManager.Interface = this;
return SocketTask.Done.AsTasks();
return true;
}
#endregion
@ -204,7 +193,7 @@ namespace MLAPI.Transports.Facepunch
void IConnectionManager.OnConnected(ConnectionInfo info)
{
InvokeOnTransportEvent(NetworkEvent.Connect, ServerClientId, NetworkChannel.ChannelUnused, default, Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Connect, ServerClientId, default, Time.realtimeSinceStartup);
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Connected with Steam user {info.Identity.SteamId}.");
@ -212,7 +201,7 @@ namespace MLAPI.Transports.Facepunch
void IConnectionManager.OnDisconnected(ConnectionInfo info)
{
InvokeOnTransportEvent(NetworkEvent.Disconnect, ServerClientId, NetworkChannel.ChannelUnused, default, Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Disconnect, ServerClientId, default, Time.realtimeSinceStartup);
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Disconnected Steam user {info.Identity.SteamId}.");
@ -222,7 +211,7 @@ namespace MLAPI.Transports.Facepunch
{
byte[] payload = new byte[size];
Marshal.Copy(data, payload, 0, size);
InvokeOnTransportEvent(NetworkEvent.Data, ServerClientId, (NetworkChannel)payload[size - 1], new ArraySegment<byte>(payload, 0, size - 1), Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Data, ServerClientId, new ArraySegment<byte>(payload, 0, size - 1), Time.realtimeSinceStartup);
}
#endregion
@ -247,7 +236,7 @@ namespace MLAPI.Transports.Facepunch
steamId = info.Identity.SteamId
});
InvokeOnTransportEvent(NetworkEvent.Connect, connection.Id, NetworkChannel.ChannelUnused, default, Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Connect, connection.Id, default, Time.realtimeSinceStartup);
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Connected with Steam user {info.Identity.SteamId}.");
@ -260,7 +249,7 @@ namespace MLAPI.Transports.Facepunch
{
connectedClients.Remove(connection.Id);
InvokeOnTransportEvent(NetworkEvent.Disconnect, connection.Id, NetworkChannel.ChannelUnused, default, Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Disconnect, connection.Id, default, Time.realtimeSinceStartup);
if (LogLevel <= LogLevel.Developer)
Debug.Log($"[{nameof(FacepunchTransport)}] - Disconnected Steam user {info.Identity.SteamId}");
@ -270,7 +259,7 @@ namespace MLAPI.Transports.Facepunch
{
byte[] payload = new byte[size];
Marshal.Copy(data, payload, 0, size);
InvokeOnTransportEvent(NetworkEvent.Data, connection.Id, (NetworkChannel)payload[size - 1], new ArraySegment<byte>(payload, 0, size - 1), Time.realtimeSinceStartup);
InvokeOnTransportEvent(NetworkEvent.Data, connection.Id, new ArraySegment<byte>(payload, 0, size), Time.realtimeSinceStartup);
}
#endregion

Просмотреть файл

@ -3,7 +3,7 @@ using UnityEngine;
using UnityEditor;
#endif
namespace MLAPI.Transports.Facepunch
namespace Netcode.Transports.Facepunch
{
public class ReadOnlyAttribute : PropertyAttribute { }

Просмотреть файл

@ -1,8 +1,8 @@
{
"name": "Facepunch MLAPI Transport",
"rootNamespace": "MLAPI.Transports.Facepunch",
"name": "Facepunch Transport for Netcode for GameObjects",
"rootNamespace": "Netcode.Transports.Facepunch",
"references": [
"Unity.Multiplayer.MLAPI.Runtime"
"Unity.Netcode.Runtime"
],
"includePlatforms": [
"Editor",

Просмотреть файл

@ -0,0 +1,11 @@
{
"name": "com.community.netcode.transport.facepunch",
"displayName": "Facepunch Transport for Netcode for GameObjects",
"version": "2.0.0",
"unity": "2019.4",
"description": "Facepunch Transport for Netcode for GameObjects",
"author": "Nico Thomas (Transport Adapter), Floris van Onna (Transport Adapter), Garry Newman (Author of Facepunch.Steamworks)",
"dependencies": {
"com.unity.netcode.gameobjects": "0.2.0-preview.1"
}
}

Просмотреть файл

@ -0,0 +1,14 @@
# Changelog
All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
## 2.0.0
### Changed
- Targets the Netcode for GameObjects 1.0.0 package.
- Renamed namespaces from MLAPI to Netcode.
### Removed
- Removed support for channels.
## 1.0.0
First version of the LiteNetLib transport as a Unity package.

Просмотреть файл

@ -0,0 +1 @@
LiteNetLib Transport for Netocde for GameObjects.

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше