public void ServerToClientSetDisconnectReason(ulong netId, ConnectStatus status) { var writer = new FastBufferWriter(sizeof(ConnectStatus), Allocator.Temp); writer.WriteValueSafe(status); NetworkManager.Singleton.CustomMessagingManager.SendNamedMessage("ServerToClientSetDisconnectReason", netId, writer); }
public void ClientBroadcast(TBroadCast broadCast) { if (!IsClient) { throw new InvalidOperationException("Cannot send client broadcast while not running in client mode. Call StartClient first."); } IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, m_Port); using (FastBufferWriter writer = new FastBufferWriter(1024, Allocator.Temp, 1024 * 64)) { WriteHeader(writer, MessageType.BroadCast); writer.WriteNetworkSerializable(broadCast); var data = writer.ToArray(); try { // This works because PooledBitStream.Get resets the position to 0 so the array segment will always start from 0. m_Client.SendAsync(data, data.Length, endPoint); } catch (Exception e) { Debug.LogError(e); } } }
async Task ReceiveBroadcastAsync() { UdpReceiveResult udpReceiveResult = await m_Client.ReceiveAsync(); var segment = new ArraySegment <byte>(udpReceiveResult.Buffer, 0, udpReceiveResult.Buffer.Length); using var reader = new FastBufferReader(segment, Allocator.Temp); try { if (ReadAndCheckHeader(reader, MessageType.BroadCast) == false) { return; } reader.ReadNetworkSerializable(out TBroadCast receivedBroadcast); if (ProcessBroadcast(udpReceiveResult.RemoteEndPoint, receivedBroadcast, out TResponse response)) { using var writer = new FastBufferWriter(1024, Allocator.Temp, 1024 * 64); WriteHeader(writer, MessageType.Response); writer.WriteNetworkSerializable(response); var data = writer.ToArray(); await m_Client.SendAsync(data, data.Length, udpReceiveResult.RemoteEndPoint); } } catch (Exception e) { Debug.LogException(e); } }
private void WriteHeader(FastBufferWriter writer, MessageType messageType) { // Serialize unique application id to make sure packet received is from same application. writer.WriteValueSafe(m_UniqueApplicationId); // Write a flag indicating whether this is a broadcast writer.WriteByteSafe((byte)messageType); }
void IOutputStream.WriteString(string value) { if (!string.IsNullOrEmpty(value)) { var size = FastBufferWriter.GetUtf8StringSize(value); _size += VarIntHelper.GetVarInt32Size((uint)size) + size; } else { _size++; } }
public void StringSizeOk() { Assert.Equal(5, FastBufferWriter.GetUtf8StringSize("testy")); Assert.Equal(12, FastBufferWriter.GetUtf8StringSize("Привіт")); }