Пример #1
0
        /// <exclude />
        public static ClientElement GetClientElement(this Element element)
        {
            if (element.VisualData.Icon == null || element.Actions.Any(a => a.VisualData?.Icon == null))
            {
                throw new InvalidOperationException($"Unable to create ClientElement from Element with entity token '{element.ElementHandle.EntityToken.Serialize()}'. The element or one of its actions is missing an icon definition.");
            }

            string entityToken = EntityTokenSerializer.Serialize(element.ElementHandle.EntityToken, true);

            string piggyBag = element.ElementHandle.SerializedPiggyback;

            var clientElement = new ClientElement
            {
                ElementKey            = $"{element.ElementHandle.ProviderName}{entityToken}{piggyBag}",
                ProviderName          = element.ElementHandle.ProviderName,
                EntityToken           = entityToken,
                Piggybag              = piggyBag,
                PiggybagHash          = HashSigner.GetSignedHash(piggyBag).Serialize(),
                Label                 = element.VisualData.Label,
                HasChildren           = element.VisualData.HasChildren,
                IsDisabled            = element.VisualData.IsDisabled,
                Icon                  = element.VisualData.Icon,
                OpenedIcon            = element.VisualData.OpenedIcon,
                ToolTip               = element.VisualData.ToolTip,
                Actions               = element.Actions.ToClientActionList(),
                PropertyBag           = element.PropertyBag.ToClientPropertyBag(),
                TagValue              = element.TagValue,
                ContainsTaggedActions = element.Actions.Any(f => f.TagValue != null),
                TreeLockEnabled       = element.TreeLockBehavior == TreeLockBehavior.Normal,
                ElementBundle         = element.VisualData.ElementBundle,
                BundleElementName     = element.VisualData.BundleElementName
            };

            clientElement.ActionKeys =
                (from clientAction in clientElement.Actions
                 select clientAction.ActionKey).ToList();

            if (element.MovabilityInfo.DragType != null)
            {
                clientElement.DragType = element.MovabilityInfo.GetHashedTypeIdentifier();
            }

            List <string> apoptables = element.MovabilityInfo.GetDropHashTypeIdentifiers();

            if (apoptables != null && apoptables.Count > 0)
            {
                clientElement.DropTypeAccept = apoptables;
            }

            clientElement.DetailedDropSupported = element.MovabilityInfo.SupportsIndexedPosition;

            return(clientElement);
        }
Пример #2
0
        /// <exclude />
        public static ClientElement GetClientElement(this Element element)
        {
            if (element.VisualData.Icon == null || element.Actions.Any(a => a.VisualData.Icon == null))
            {
                throw new InvalidOperationException(string.Format("Unable to create ClientElement from Element with entity token '{0}'. The element or one of its actions is missing an icon definition.", element.ElementHandle.EntityToken.Serialize()));
            }

            string entityToken = EntityTokenSerializer.Serialize(element.ElementHandle.EntityToken, true);

            string piggyBag = element.ElementHandle.SerializedPiggyback;
            
            var clientElement = new ClientElement
                   {
                       ElementKey = string.Format("{0}{1}{2}", element.ElementHandle.ProviderName, entityToken, piggyBag), 
                       ProviderName = element.ElementHandle.ProviderName,
                       EntityToken = entityToken,
                       Piggybag = piggyBag,
                       PiggybagHash = HashSigner.GetSignedHash(piggyBag).Serialize(),
                       Label = element.VisualData.Label,
                       HasChildren = element.VisualData.HasChildren,
                       IsDisabled = element.VisualData.IsDisabled,
                       Icon = element.VisualData.Icon,
                       OpenedIcon = element.VisualData.OpenedIcon,
                       ToolTip = element.VisualData.ToolTip,
                       Actions = element.Actions.ToClientActionList(),
                       PropertyBag = element.PropertyBag.ToClientPropertyBag(),
                       TagValue = element.TagValue,
                       ContainsTaggedActions = element.Actions.Any(f => f.TagValue != null),
                       TreeLockEnabled = element.TreeLockBehavior == TreeLockBehavior.Normal,
                       ElementBundle = element.VisualData.ElementBundle,
                       BundleElementName = element.VisualData.BundleElementName
                   };

            clientElement.ActionKeys =
                (from clientAction in clientElement.Actions
                 select clientAction.ActionKey).ToList();

            if (element.MovabilityInfo.DragType != null) clientElement.DragType = element.MovabilityInfo.GetHashedTypeIdentifier();

            List<string> apoptables = element.MovabilityInfo.GetDropHashTypeIdentifiers();
            if (apoptables != null && apoptables.Count > 0)
            {
                clientElement.DropTypeAccept = apoptables;
            }

            clientElement.DetailedDropSupported = element.MovabilityInfo.SupportsIndexedPosition;

            return clientElement;
        }
Пример #3
0
        private void CreateServerHandler(object sender, RoutedEventArgs e)
        {
            tb_IPAddress.Background = new SolidColorBrush(Colors.LightGray);
            tb_Port.Background      = new SolidColorBrush(Colors.LightGray);
            bool error = false;

            if (!Regex.IsMatch(tb_IPAddress.Text, @"^((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))$"))
            {
                error = true;
                tb_IPAddress.Background = new SolidColorBrush(Colors.Red);
            }
            if (!IPAddress.TryParse(tb_IPAddress.Text, out IPAddress ip))
            {
                error = true;
                tb_IPAddress.Background = new SolidColorBrush(Colors.Red);
            }
            if (!int.TryParse(tb_Port.Text, out int port))
            {
                error = true;
                tb_Port.Background = new SolidColorBrush(Colors.Red);
            }
            if (port < 0 || port >= 65536)
            {
                error = true;
                tb_Port.Background = new SolidColorBrush(Colors.Red);
            }

            Global.Server = new Core.Server.Server();

            Global.Server.OnNewConnectionCreated += delegate(object o, ClientConnectedEventArgs args) { LogWindow.Dispatcher.Invoke(delegate() { LogWindow.WriteLog("Подключен новый агент"); }); };
            Global.Server.OnServerStarted        += delegate(object o, EventArgs args) { LogWindow.WriteLog("Сервер настроен и начинает прослушивание"); };
            Global.Server.OnMessageReceived      += delegate(object o, ReceiveMessageEventArgs args) { LogWindow.Dispatcher.Invoke(delegate() { LogWindow.WriteLog($"[{args.FromID}] >> {args.Message}"); }); };
            Global.Server.OnClientDisconnected   += delegate(object o, EventArgs args) { ClientElement cl = (ClientElement)o; LogWindow.Dispatcher.Invoke(delegate() { LogWindow.WriteLog("Клиент отключился"); }); };

            Exception connectException = Global.Server.CreateServer(ip, port);

            if (connectException != null)
            {
                error = true;
                tb_Port.Background      = new SolidColorBrush(Colors.Red);
                tb_IPAddress.Background = new SolidColorBrush(Colors.Red);
                MessageBox.Show("Ошибка при подключении к серверу: " + connectException.Message);
            }

            if (error)
            {
                return;
            }

            LogWindow.Title = "Сервер [" + tb_IPAddress.Text + ":" + tb_Port.Text + "]";

            LogWindow.Show();
            this.Close();
        }