aboutsummaryrefslogtreecommitdiff
path: root/src/message/signalproxy
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2021-12-01 16:57:32 +0100
committerMax Audron <audron@cocaine.farm>2021-12-01 18:09:27 +0100
commitcc6b5a11cdd8879b241fd06b425d9e2d9690d17e (patch)
tree79eb03f965e375f745b5138c9af90e4c941c95c2 /src/message/signalproxy
parentsplit bufferview into sepperate files (diff)
add basic bufferviewmanager impl
Diffstat (limited to '')
-rw-r--r--src/message/signalproxy/objects/bufferviewmanager.rs157
1 files changed, 135 insertions, 22 deletions
diff --git a/src/message/signalproxy/objects/bufferviewmanager.rs b/src/message/signalproxy/objects/bufferviewmanager.rs
index 1877c70..182fa1d 100644
--- a/src/message/signalproxy/objects/bufferviewmanager.rs
+++ b/src/message/signalproxy/objects/bufferviewmanager.rs
@@ -9,32 +9,118 @@ use crate::message::signalproxy::translation::Network;
use crate::message::StatefulSyncableClient;
#[allow(unused_imports)]
use crate::message::StatefulSyncableServer;
-use crate::message::Syncable;
+use crate::message::{NetworkMap, Syncable};
-use crate::primitive::{Variant, VariantList};
+use crate::primitive::{Variant, VariantList, VariantMap};
+
+use super::BufferViewConfig;
#[derive(Debug, Clone, PartialEq)]
-// #[network(repr = "list")]
pub struct BufferViewManager {
- // #[network(rename = "bufferViewConfigs", network, variant = "VariantMap")]
- pub buffer_view_configs: HashMap<i32, super::BufferViewConfig>,
- // // C->S calls
-
- // requestCreateBufferView(properties: QVariantMap)
- // requestCreateBufferViews(properties: QVariantList)
- // requestDeleteBufferView(bufferViewId: Int)
- // requestDeleteBufferViews(bufferViews: QVariantList)
-
- // // S->C calls
-
- // addBufferViewConfig(bufferViewConfigId: Int)
- // deleteBufferViewConfig(bufferViewConfigId: Int)
- // newBufferViewConfig(bufferViewConfigId: Int)
- // /**
- // * Replaces all properties of the object with the content of the
- // * "properties" parameter. This parameter is in network representation.
- // */
- // update(properties: QVariantMap)
+ pub buffer_view_configs: HashMap<i32, BufferViewConfig>,
+}
+
+// TODO initialize the BufferViewConfigs from somewhere
+// TODO add buffer view configs, where does the data come from?
+impl BufferViewManager {
+ pub fn request_create_buffer_view(&self, properties: BufferViewConfig) {
+ sync!("requestCreateBufferView", [properties.to_network_map()])
+ }
+
+ pub fn request_create_buffer_views(&self, properties: &[BufferViewConfig]) {
+ self.send_sync(
+ "requestCreateBufferViews",
+ properties
+ .iter()
+ .map(|view| view.to_network_map().into())
+ .collect(),
+ )
+ }
+
+ pub fn request_delete_buffer_view(&self, id: i32) {
+ sync!("requestDeleteBufferView", [id])
+ }
+
+ pub fn request_delete_buffer_views(&self, ids: &[i32]) {
+ self.send_sync(
+ "requestCreateBufferViews",
+ ids.iter().map(|id| (*id).into()).collect(),
+ )
+ }
+
+ #[cfg(feature = "client")]
+ pub fn add_buffer_view_config(&mut self, id: i32) {
+ // TODO init!("BufferViewConfig", id);
+ }
+
+ #[cfg(feature = "server")]
+ pub fn add_buffer_view_config(&mut self, config: BufferViewConfig) {
+ self.buffer_view_configs.insert(0, config);
+
+ sync!("addBufferViewConfig", [0]);
+ }
+
+ pub fn delete_buffer_view_config(&mut self, id: i32) {
+ if self.buffer_view_configs.contains_key(&id) {
+ self.buffer_view_configs.remove(&id);
+ }
+
+ #[cfg(feature = "server")]
+ sync!("deleteBufferViewConfig", [id])
+ }
+}
+
+#[cfg(feature = "client")]
+impl StatefulSyncableClient for BufferViewManager {
+ fn sync_custom(&mut self, mut msg: crate::message::SyncMessage)
+ where
+ Self: Sized,
+ {
+ match msg.slot_name.as_str() {
+ "addBufferViewConfig" | "newBufferViewConfig" => {
+ self.add_buffer_view_config(msg.params.remove(0).try_into().unwrap())
+ }
+ "deleteBufferViewConfig" => {
+ self.delete_buffer_view_config(msg.params.remove(0).try_into().unwrap())
+ }
+ _ => (),
+ }
+ }
+}
+
+#[cfg(feature = "server")]
+impl StatefulSyncableServer for BufferViewManager {
+ fn sync_custom(&mut self, mut msg: crate::message::SyncMessage)
+ where
+ Self: Sized,
+ {
+ match msg.slot_name.as_str() {
+ "requestCreateBufferView" => self.add_buffer_view_config(
+ BufferViewConfig::from_network_map(&mut msg.params.remove(0).try_into().unwrap()),
+ ),
+ "requestCreateBufferViews" => {
+ let views: VariantList = msg.params.remove(0).try_into().unwrap();
+ views.into_iter().for_each(|view| {
+ self.add_buffer_view_config(BufferViewConfig::from_network_map(
+ &mut view.try_into().unwrap(),
+ ))
+ });
+ }
+ "requestDeleteBufferView" => {
+ self.delete_buffer_view_config(msg.params.remove(0).try_into().unwrap())
+ }
+ "requestDeleteBufferViews" => {
+ let ids: VariantList = msg.params.remove(0).try_into().unwrap();
+ ids.into_iter()
+ .for_each(|id| self.delete_buffer_view_config(id.try_into().unwrap()));
+ }
+ _ => (),
+ }
+ }
+}
+
+impl Syncable for BufferViewManager {
+ const CLASS: &'static str = "BufferViewManager";
}
impl super::NetworkList for BufferViewManager {
@@ -59,3 +145,30 @@ impl super::NetworkList for BufferViewManager {
}
}
}
+
+impl super::NetworkMap for BufferViewManager {
+ type Item = VariantMap;
+
+ fn to_network_map(&self) -> Self::Item {
+ let mut res = VariantMap::new();
+
+ res.insert(
+ s!("bufferViewIds"),
+ Variant::VariantList(
+ self.buffer_view_configs
+ .iter()
+ .map(|(k, _)| i32::try_into(*k).unwrap())
+ .collect(),
+ ),
+ );
+
+ return res;
+ }
+
+ fn from_network_map(input: &mut Self::Item) -> Self {
+ // TODO Somehow do the initrequests for all the IDs we get here
+ Self {
+ buffer_view_configs: HashMap::new(),
+ }
+ }
+}