Ejemplo n.º 1
0
 void onVoiceBatchUpdate(VoicePaketBatchUpdate data, NetPeer peer)
 {
     try
     {
         var con = VoicePlugin.GetConnection(_connectionInfo.ServerGUID);
         if (con == null)
         {
             return;
         }
         var mute = new HashSet <ushort>(con.GetChannel(con.IngameChannel).AllClients);
         mute.Remove(con.LocalClientId);
         var unmute = new HashSet <ushort>();
         if (data.Data.Length > 0)
         {
             data.Data.ForEach(d =>
             {
                 if (d.ClientID == 0)
                 {
                     d.ClientID = con.GetClientId(d.ClientName);
                 }
                 if (d.ClientID != 0)
                 {
                     mute.Remove(d.ClientID);
                     unmute.Add(d.ClientID);
                     con.GetClient(d.ClientID)?.UpdatePosition(d.Position, d.VolumeModifier, false, false);
                 }
             });
         }
         if (mute.SetEquals(con._MutedClients) && unmute.SetEquals(con._UnmutedClients))
         {
             return;
         }
         VoicePlugin.Log("BatchUpdate {0}", data.Data.Length);
         con._UnmutedClients = new ConcurrentHashSet <ushort>(unmute);
         con._MutedClients   = new ConcurrentHashSet <ushort>(mute);
         con._MutedClients.TryRemove(con.LocalClientId);
         con.DoMuteActions();
     }
     catch (Exception ex)
     {
         VoicePlugin.Log(ex.ToString());
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Send a voice update to a client
        /// </summary>
        /// <param name="targetId">target client</param>
        /// <param name="data">new voice data</param>
        public void SendUpdate(long targetId, IEnumerable <VoiceLocationInformation> data)
        {
            if (_connectedPeers.TryGetValue(targetId, out var peer))
            {
                if (peer.ConnectionState == ConnectionState.Connected)
                {
                    var p = new VoicePaketBatchUpdate();

                    List <BatchDataRecord> list = new List <BatchDataRecord>();
                    foreach (var item in data)
                    {
                        list.Add(new BatchDataRecord()
                        {
                            ClientID   = item.ClientID, Position = item.Position, VolumeModifier = item.VolumeModifier,
                            ClientName = item.ClientID == 0 ? item.Name  : String.Empty
                        });
                    }
                    p.Data = list.ToArray();
                    //Logger.Debug("SendUpdate {0} {1} Records => {2}",targetId, data.Count(),p.Data.Length);
                    SendTo(peer, p, DeliveryMethod.ReliableOrdered);
                }
            }
        }