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(); } }
/** * @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; } } }
private async Task EnqueueWhileSuccessful(MessageHandler.Message <string, string> message) { while (await _topicPartitionQueue.TryEnqueueAsync(message)) { } }