Example #1
0
        private void SendP2pInternal(
            NetDataWriter writer,
            DeliveryTarget deliveryTarget,
            DeliveryMethod deliveryMethod)
        {
            if (deliveryMethod == DeliveryMethod.Tcp)
            {
                _logger.LogError("not support tcp transfer in p2p");
                return;
            }

            if (P2pGroup == null)
            {
                _logger.LogWarning("No joined any P2pGroup");
                return;
            }

            if (deliveryTarget == DeliveryTarget.All)
            {
                P2pGroup.SendAll(writer, deliveryMethod);

                _readerForSendInternal.SetSource(writer);
                OnP2pReceive(this, _readerForSendInternal);
            }
            else if (deliveryTarget == DeliveryTarget.Others)
            {
                P2pGroup.SendAll(writer, deliveryMethod);
            }
            else if (deliveryTarget == DeliveryTarget.Master)
            {
                var member = P2pGroup.Find(P2pGroup.MasterSessionId);

                if (member != null)
                {
                    if (member.IsMine())
                    {
                        // 내가 마스터라면 바로 호출함
                        _readerForSendInternal.SetSource(writer);
                        OnP2pReceive(this, _readerForSendInternal);
                    }
                    else
                    {
                        member.SendAsync(writer, deliveryMethod);
                    }
                }
            }
        }
Example #2
0
 /// <summary>
 /// P2P 그룹의 모든 유저에게 데이터를 전송함
 /// </summary>
 /// <param name="dataWriter">전송할 데이터</param>
 /// <param name="deliveryMethod">전송 방식</param>
 public void SendAll(NetDataWriter dataWriter, DeliveryMethod deliveryMethod)
 {
     P2pGroup?.SendAll(dataWriter, deliveryMethod);
 }