Exemplo n.º 1
0
        private void ProcessCommandMessage(CliClient client, string domain, ConcurrentDictionary <ulong, MessageEntry> messages, ObjectCommandEnvelope commandEnvelope)
        {
            BaseCommand responseCommand = null;

            switch ((CommandType)commandEnvelope.Command.Type)
            {
            case CommandType.ObjectCreate:
                responseCommand = new ObjectCreateCommand(commandEnvelope.Command);
                break;

            case CommandType.ObjectUpdatePosition:
                responseCommand = new ObjectUpdatePositionCommand(commandEnvelope.Command);
                break;

            case CommandType.ObjectDestroy:
                responseCommand = new ObjectDestroyCommand(commandEnvelope.Command);
                break;
            }
            if (!messages.ContainsKey(commandEnvelope.ToObjectId))
            {
                Log.WriteLine($"[{client.ClientId} ERROR: {domain} mMessage {commandEnvelope.ToObjectId} is missing");
                return;
            }
            messages[commandEnvelope.ToObjectId].ResponseTimeStamp = DateTime.Now;
            messages[commandEnvelope.ToObjectId].ResponseCount++;
            byte[] responseData = commandEnvelope.Serialize();
            byte[] requestData  = messages[commandEnvelope.ToObjectId].CommandEnvelope.Serialize();
            if (!ComparyBinary(responseData, requestData))
            {
                Log.WriteLine($"{client.ClientId} ERROR: {domain} message {commandEnvelope.ToObjectId} invalid response");
            }
        }
Exemplo n.º 2
0
        /// <summary>Sends a command envelope.</summary>
        /// <param name="commandEnvelope">The command envelope.</param>
        /// <param name="qualityOfService">The quality of service.</param>
        /// <exception cref="ArgumentNullException">commandEnvelope is null.</exception>
        public void SendCommandEnvelope(ObjectCommandEnvelope commandEnvelope, MessageControlFlags qualityOfService = MessageControlFlags.QOS0)
        {
            if (commandEnvelope == null)
            {
                throw new ArgumentNullException(nameof(commandEnvelope));
            }

            var message = new UdpMessage(this.sequenceId, MessageControlFlags.COMMAND | qualityOfService, commandEnvelope.Serialize());

            this.sequenceId++;
            this.pendingMessages.Enqueue(message);
        }