예제 #1
0
        public async Task ProcessMessagesAsync(CancellationToken ct)
        {
            _consumer.Subscribe(_topic);

            try
            {
                while (!ct.IsCancellationRequested)
                {
                    var consumeResult = Consume(ct);

                    if (consumeResult != null)
                    {
                        var queue = _topicPartitionQueueSelector.Select(consumeResult.TopicPartition);

                        var message = new MessageHandler.Message <TKey, TValue>(_consumer, consumeResult);

                        await queue.EnqueueAsync(message);
                    }
                }
            }
            catch (OperationCanceledException) { }
            finally
            {
                //TODO: Close() blocks indefinitely if an exception is thrown in PartitionsRevoked/Assigned handlers.
                // https://github.com/confluentinc/confluent-kafka-dotnet/issues/1280

                _consumer.Close();
            }
        }
예제 #2
0
            /**
             * @brief Handle incomming messages from the attached engine(s).
             * @param[in] sender (object) The messageing system that recieved the message from the engine.
             * @param[in] e (NotificationEventArgs) Argument send with the event. The data of this evenent in this case contains the allready converted message.
             * @see sulphur.editor.base.MessageHandler
             */
            void HandleEngineMessage(object sender, NotificationEventArgs e)
            {
                MessageHandler.Message msg = (MessageHandler.Message)e.notification_data;
                if (e.notification_id == (uint)MessageHandler.Notifications.kMessageRecieved)
                {
                    switch (msg.id)
                    {
                    case native.NetworkMessages.kEntityMoved:
                    {
                        native.messages.EntityMovedMessage data = (native.messages.EntityMovedMessage)msg.data;
                        Vector3            translation          = new Vector3(data.x, data.y, data.z);
                        TransformComponent transform            = hierarchy.GetObjectAtIndex((int)data.entity_index).transform_;
                        transform.TranslateWorld(translation);
                        data.x = transform.position_.X;
                        data.y = transform.position_.Y;
                        data.z = transform.position_.Z;
                        byte[] byte_data = Utils.StructToBytes(data);
                        native.Networking.SNetSendData((uint)msg.id, byte_data, (uint)byte_data.Length);

                        break;
                    }

                    case native.NetworkMessages.kEntityRotated:
                    {
                        native.messages.EntityRotateMessage data = (native.messages.EntityRotateMessage)msg.data;
                        Quaternion         rotation  = new Quaternion(data.x, data.y, data.z, data.w);
                        TransformComponent transform = hierarchy.GetObjectAtIndex((int)data.entity_index).transform_;
                        transform.RotateLocal(rotation);
                        data.x = transform.local_rotation_.X;
                        data.y = transform.local_rotation_.Y;
                        data.z = transform.local_rotation_.Z;
                        data.w = transform.local_rotation_.W;
                        byte[] byte_data = Utils.StructToBytes(data);
                        native.Networking.SNetSendData((uint)msg.id, byte_data, (uint)byte_data.Length);

                        break;
                    }

                    case native.NetworkMessages.kEntityScaled:
                    {
                        native.messages.EntityScaleMessage data = (native.messages.EntityScaleMessage)msg.data;
                        Vector3            scale     = new Vector3(data.x, data.y, data.z);
                        TransformComponent transform = hierarchy.GetObjectAtIndex((int)data.entity_index).transform_;
                        transform.scale_ += scale;
                        data.x            = transform.scale_.X;
                        data.y            = transform.scale_.Y;
                        data.z            = transform.scale_.Z;
                        byte[] byte_data = Utils.StructToBytes(data);
                        native.Networking.SNetSendData((uint)msg.id, byte_data, (uint)byte_data.Length);
                    }
                        // send modification to engine that data has been modified
                        break;
                    }
                }
            }
예제 #3
0
 private async Task EnqueueWhileSuccessful(MessageHandler.Message <string, string> message)
 {
     while (await _topicPartitionQueue.TryEnqueueAsync(message))
     {
     }
 }