private static void RecieveReserveNetId(ushort senderPlayerId, ref DataStreamReader recievePacket, ref DataStreamReader.Context ctx) { if (GamePacketManager.IsLeader) { //HostではNetIDの整合性を確認 ushort reserveNetId = (ushort)Instance.m_identityList.Count; Instance.m_identityList.Add(null); //Clientに通達する using (var packet = new DataStreamWriter(3, Allocator.Temp)) { packet.Write((byte)BuiltInPacket.Type.ReserveNetId); packet.Write(reserveNetId); GamePacketManager.Send(senderPlayerId, packet, QosType.Reliable); } } else { //確認されたauthorの変更を反映 ushort reserveNetId = recievePacket.ReadUShort(ref ctx); if (uncheckReserveNetIdCallbacks.Count > 0) { uncheckReserveNetIdCallbacks[0] (reserveNetId); uncheckReserveNetIdCallbacks.RemoveAt(0); } else { Debug.LogError("uncheckReserveNetIdCallbacks is 0"); } } }
private void SendPacketChangeAuthor(ushort netId, ushort author) { using (var packet = new DataStreamWriter(9, Allocator.Temp)) { packet.Write((byte)BuiltInPacket.Type.ChangeAuthor); packet.Write(m_groupHash); packet.Write(netId); packet.Write(author); GamePacketManager.Send(0, packet, QosType.Reliable); } }
/// <summary> /// Hostに問い合わせて重複しないNetIDを取得する. /// </summary> public static void ReserveNetId(System.Action <ushort> onReserveNetId) { if (GamePacketManager.IsLeader) { onReserveNetId((ushort)Instance.m_identityList.Count); } else { uncheckReserveNetIdCallbacks.Add(onReserveNetId); using (var packet = new DataStreamWriter(1, Allocator.Temp)) { packet.Write((byte)BuiltInPacket.Type.ReserveNetId); GamePacketManager.Send(0, packet, QosType.Reliable); } } }
internal void SendRpc(ushort targetPlayerId, byte componentIndex, byte methodId, DataStreamWriter rpcPacket, QosType qosType, bool important) { if (!isSyncComplete) { return; } var writer = new DataStreamWriter(rpcPacket.Length + 9, Allocator.Temp); CreateRpcPacket(ref writer, ref rpcPacket, componentIndex, methodId); GamePacketManager.Send(targetPlayerId, writer, qosType); //if (important) { // GamePacketManager.Send (playerId, writer, qosType); //} else { // GamePacketManager.Send (playerId, writer, qosType, gridId); //} writer.Dispose(); }