Пример #1
0
        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");
                }
            }
        }
Пример #2
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);
     }
 }
Пример #3
0
 /// <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);
         }
     }
 }
Пример #4
0
        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();
        }