Example #1
0
        public void DispatchMessage(ConnectionId connectionId, ObjectId receiverObjectId, INetworkMessage <IObjectMessage> objectMessage,
                                    SequenceNumber sequenceNumber, float latency)
        {
            var pooledInstance = _instances[receiverObjectId];

            if (pooledInstance == null)
            {
                Debug.LogWarning("object with ID " + receiverObjectId + " does not exist");
            }
            else
            {
                var instance = pooledInstance.Instance;

                var senderRole = ObjectRole.Nobody;
                {
                    var isOwner     = connectionId == instance.OwnerConnectionId;
                    var isAuthority = connectionId == instance.AuthorityConnectionId;
                    senderRole = senderRole | (isOwner ? ObjectRole.Owner : ObjectRole.Nobody);
                    senderRole = senderRole | (isAuthority ? ObjectRole.Authority : ObjectRole.Nobody);
                    senderRole = senderRole | (!isOwner && !isAuthority ? ObjectRole.Others : ObjectRole.Nobody);
                }

                instance.GameObjectNetworkInfo.LastReceivedMessageTimestamp = Time.realtimeSinceStartup;
                instance.MessageHandler.Dispatch(new Sender(connectionId, senderRole, sequenceNumber, latency), objectMessage);
                objectMessage.Dispose();
            }
        }
Example #2
0
 public void Send <TMessage>(IPEndPoint endpoint, INetworkMessage <TMessage> message) where TMessage : IMessage
 {
     _netBuffer.Reset();
     message.Serialize(_netBuffer);
     message.Dispose();
     _transporter.SendUnconnected(endpoint, _netBuffer);
 }
Example #3
0
 public void Send <TMessage>(INetworkMessage <TMessage> message, ObjectRole recipient) where TMessage : IObjectMessage
 {
     if ((recipient & ObjectRole.Owner) != 0 || (recipient & ObjectRole.Authority) != 0)
     {
         var sequenceNumber = _sequenceNumberCounter;
         _messageRouter.Dispatch(new Sender(ConnectionId.NoConnection, ObjectRoles.Everyone, sequenceNumber, 0), message);
         _sequenceNumberCounter = sequenceNumber.Increment();
     }
     message.Dispose();
 }