예제 #1
0
        public void SendBytes(byte[] buffer, int size, NetworkReliablity reliability = NetworkReliablity.Reliable)
        {
            byte error;
            var  channelId = NetworkInterface.GetChannelID(reliability);

            NetworkTransport.Send(HostID, ConnectionID, channelId, buffer, size, out error);
            UNETUtility.HandleError(error);
        }
        protected override void SendImpl(int connectionId, byte[] buffer, int count, NetworkReliablity reliablity)
        {
            byte error;
            var  channelId = GetChannelID(reliablity);

            NetworkTransport.Send(HostID, connectionId, channelId, buffer, count, out error);
            UNETUtility.HandleError(error);
        }
예제 #3
0
        protected override void SendImpl(int connectionId, byte[] buffer, int count,
                                         NetworkReliablity reliability)
        {
            ValidateSteamInitalized();
            EP2PSend ep2p = reliability == NetworkReliablity.Reliable ? EP2PSend.k_EP2PSendReliable : EP2PSend.k_EP2PSendUnreliable;

            SendPacket(connectionUsers[connectionId], buffer, (uint)count, ep2p);
        }
 public void SendBytes(byte[] buffer, int size, NetworkReliablity reliability = NetworkReliablity.Reliable)
 {
     if (!IsConnected)
     {
         return;
     }
     NetworkInterface.Send(Id, buffer, size, reliability);
 }
        int GetChannelID(NetworkReliablity reliability)
        {
            int channelId;

            if (Channels.TryGetValue(reliability, out channelId))
            {
                return(channelId);
            }
            return(Channels[NetworkReliablity.Reliable]);
        }
예제 #6
0
        public static void Send(this INetworkConnection connection, byte header,
                                MessageBase message, NetworkReliablity reliablity = NetworkReliablity.Reliable)
        {
            var writer = new NetworkWriter();

            writer.Write(header);
            message.Serialize(writer);
            connection.SendBytes(writer.AsArray(), writer.Position, reliablity);
            (message as IDisposable)?.Dispose();
        }
예제 #7
0
        protected override void SendImpl(int connectionId, byte[] data, int count,
                                         NetworkReliablity reliablity = NetworkReliablity.Reliable)
        {
            var array = ArrayPool <byte> .Shared.Rent(count);

            Buffer.BlockCopy(data, 0, array, 0, count);
            Mirror.UnreadMessages.Enqueue(new Message {
                Data = array,
                Size = count
            });
        }
예제 #8
0
        public void Send(int connectionId, byte[] buffer, int count,
                         NetworkReliablity reliability)
        {
            if (!connectionMap.ContainsKey(connectionId))
            {
                return;
            }
            var pool       = ArrayPool <byte> .Shared;
            var compressed = pool.Rent(count);
            var newSize    = CLZF2.Compress(buffer, ref compressed, count);

            SendImpl(connectionId, compressed, newSize, reliability);
            pool.Return(compressed);
        }
예제 #9
0
        public static void SendToAll(this IEnumerable <INetworkConnection> connections, byte header,
                                     MessageBase message, NetworkReliablity reliablity = NetworkReliablity.Reliable)
        {
            var writer = new NetworkWriter();

            writer.Write(header);
            message.Serialize(writer);
            var bufferSize = writer.Position;
            var buffer     = writer.AsArray();

            foreach (var connection in connections)
            {
                connection.SendBytes(buffer, bufferSize, reliablity);
            }
            (message as IDisposable)?.Dispose();
        }
 void AddChannel(ConnectionConfig config, QosType qos, NetworkReliablity reliablity)
 {
     Channels.Add(reliablity, config.AddChannel(qos));
 }
예제 #11
0
 protected abstract void SendImpl(int connectionId, byte[] buffer, int count, NetworkReliablity reliablity);