public void GetDataStatistics(Stream stream, StormancerClientViewModel clientVM, StormancerRouteViewModel route)
 {
     route.sizeStack  += stream.Length;
     route.messageNbr += 1;
     if (route.averageSizeChart.Count == 0)
     {
         route.averageSize = stream.Length;
     }
     else
     {
         route.averageSize = (route.averageSize * (route.messageNbr - 1) + stream.Length) / route.messageNbr;
     }
 }
        private void UpdateRouteData(StormancerClientViewModel clientVM, StormancerRouteViewModel route)
        {
            if (route.dataChart.Count >= 3600)
                route.dataChart.RemoveAt(0);
            if (route.messageNbrChart.Count >= 3600)
                route.messageNbrChart.RemoveAt(0);
            if (route.averageSizeChart.Count >= 3600)
                route.averageSizeChart.RemoveAt(0);
            route.debit = route.sizeStack;
            route.curve.AddKey(clientVM.client.Clock, route.sizeStack);
            route.dataChart.Add(route.sizeStack);
            route.messageNbrChart.Add(route.messageNbr);
            route.averageSizeChart.Add(route.averageSize);

            route.messageNbr = 0;
            route.sizeStack = 0;
        }
        private void ShowScene(int i, StormancerClientViewModel c)
		{
			int j = 0;

			folds[i].scene = EditorGUILayout.Foldout(folds[i].scene, "scenes");
			if (folds[i].scene)
			{
				EditorGUI.indentLevel++;
			foreach(StormancerSceneViewModel v in c.scenes.Values)	
				{
					if (folds[i].scenes.Count - 1 < j)
						folds[i].scenes.Add(new SceneFolds());
					EditorGUI.indentLevel++;

                    EditorGUILayout.BeginHorizontal(GUILayout.Width(200), GUILayout.Height(20), GUILayout.MinWidth(100), GUILayout.MaxWidth(300));
    				folds[i].scenes[j].routes = EditorGUILayout.Foldout(folds[i].scenes[j].routes, v.scene.Id);
                    //EditorGUILayout.Toggle("        ", v.connected);
                    if (GUILayout.Button("show logs", GUILayout.Width(100)) && logsToShow == null)
                    {
                        logsToShow = v.log;
                        log_scroll = Vector2.zero;
                    }
                    EditorGUILayout.EndHorizontal();

					if (folds[i].scenes[j].routes == true)
                    {
						EditorGUI.indentLevel++;
                        folds[i].scenes[j].serverRoutes = EditorGUILayout.Foldout(folds[i].scenes[j].serverRoutes, "server routes");
                        if (folds[i].scenes[j].serverRoutes == true)
                        {
                            EditorGUI.indentLevel++;

                            foreach (StormancerRouteViewModel route in v.remotes.Values.OrderBy(r=>r.Name))
                            {
                                GUILayout.BeginHorizontal(GUILayout.Width(400), GUILayout.Height(20), GUILayout.MinWidth(400), GUILayout.MaxWidth(window.position.width / 4));
                                EditorGUILayout.LabelField(route.Name + "     " + route.debit.ToString() + " b/s");
                                if (GUILayout.Button("Show Chart", GUILayout.Width(90)))
                                {
                                    routeToShow = route;
                                }
                                //EditorGUILayout.CurveField(route.curve);
                                GUILayout.EndHorizontal();
                            }
                            EditorGUI.indentLevel--;
                        }
                        folds[i].scenes[j].localRoutes = EditorGUILayout.Foldout(folds[i].scenes[j].localRoutes, "local routes");
                        if (folds[i].scenes[j].localRoutes == true)
                        {
                            EditorGUI.indentLevel++;
                            foreach (StormancerRouteViewModel route in v.routes.Values.OrderBy(r => r.Name))
                            {
                                GUILayout.BeginHorizontal(GUILayout.Width(300), GUILayout.Height(20), GUILayout.MinWidth(150), GUILayout.MaxWidth(400));
                                EditorGUILayout.LabelField(route.Name + "     " + route.debit.ToString() + " b/s");
                                if (GUILayout.Button("Show Chart", GUILayout.Width(90)))
                                {
                                    routeToShow = route;
                                }
                                //EditorGUILayout.CurveField(route.curve);
                                GUILayout.EndHorizontal();
                            }
                            EditorGUI.indentLevel--;
                        }
						EditorGUI.indentLevel--;
					}
					EditorGUI.indentLevel--;
					j++;
				}
				EditorGUI.indentLevel--;
			}
		}
        public void Build(PluginBuildContext ctx)
        {

            ctx.ClientCreated += client =>
            {
                var innerLoggerFactory = client.DependencyResolver.GetComponent<ILogger>();
                _clientVM = new StormancerClientViewModel(client);
                client.DependencyResolver.RegisterComponent<ILogger>(() => new InterceptorLogger(innerLoggerFactory, _clientVM));
                StormancerEditorDataCollector.Instance.clients.TryAdd(_id, _clientVM);
            };

            ctx.ClientDestroyed += client =>
            {
                StormancerClientViewModel temp;
                StormancerEditorDataCollector.Instance.clients.TryRemove(_id, out temp);
            };

            ctx.SceneCreated += scene =>
           {
               _clientVM.scenes.TryAdd(scene.Id, new StormancerSceneViewModel(scene));
           };

            ctx.SceneConnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = true;
                }
            };

            ctx.SceneDisconnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = false;
                }
            };

            ctx.RouteCreated += (Scene scene, Route route) =>
            {
                StormancerSceneViewModel sceneVM;
                if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                {
                    sceneVM.routes.TryAdd(route.Name, new StormancerRouteViewModel(route));
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (packet.Metadata.ContainsKey("scene"))
                {
                    var scene = (Scene)packet.Metadata["scene"];
                    StormancerSceneViewModel sceneVM;
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                    {
                        var routeId = (ushort)packet.Metadata["routeId"];
                        var temp = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                        if (temp != null)
                        {
                            temp.sizeStack += packet.Stream.Length;
                            temp.messageNbr += 1;
                            if (temp.messageNbr == 1)
                                temp.averageSize = packet.Stream.Length;
                            else
                                temp.averageSize = (temp.averageSize * (temp.messageNbr - 1) + packet.Stream.Length) / temp.messageNbr;

                            if (temp.lastUpdate + 1000 < _clientVM.client.Clock)
                            {
                                if (temp.dataChart.Count >= 10800)
                                    temp.dataChart.RemoveAt(0);
                                if (temp.messageNbrChart.Count >= 10800)
                                    temp.messageNbrChart.RemoveAt(0);
                                if (temp.averageSizeChart.Count >= 10800)
                                    temp.averageSizeChart.RemoveAt(0);
                                temp.debit = temp.sizeStack;
                                temp.lastUpdate = _clientVM.client.Clock;
                                temp.curve.AddKey(_clientVM.client.Clock, temp.sizeStack);
                                temp.dataChart.Add(temp.sizeStack);
                                temp.messageNbrChart.Add(temp.messageNbr);
                                temp.averageSizeChart.Add(temp.averageSize);

                                temp.messageNbr = 0;
                                temp.averageSize = 0;
                                temp.sizeStack = 0;
                            }
                        }
                    }
                }
            };
        }
 public InterceptorLogger(ILogger innerLogger, StormancerClientViewModel client)
 {
     _innerLogger = innerLogger;
     _clientVM = client;
 }
 public void GetDataStatistics(Stream stream, StormancerClientViewModel clientVM, StormancerRouteViewModel route)
 {
     route.sizeStack += stream.Length;
     route.messageNbr += 1;
     if (route.averageSizeChart.Count == 0)
         route.averageSize = stream.Length;
     else
         route.averageSize = (route.averageSize * (route.messageNbr - 1) + stream.Length) / route.messageNbr;
 }
        public void Build(PluginBuildContext ctx)
        {
            ctx.ClientCreated += client =>
            {
                var innerLoggerFactory = client.DependencyResolver.Resolve <ILogger>();
                _clientVM    = new StormancerClientViewModel(client);
                _clientVM.id = _id;
                client.DependencyResolver.Register <ILogger>(() => new InterceptorLogger(innerLoggerFactory, _clientVM));
                StormancerEditorDataCollector.Instance.clients.TryAdd(_id, _clientVM);
            };

            ctx.ClientDestroyed += client =>
            {
                StormancerClientViewModel temp;
                StormancerEditorDataCollector.Instance.clients.TryRemove(_id, out temp);
            };

            ctx.SceneCreated += scene =>
            {
                _clientVM.scenes.TryAdd(scene.Id, new StormancerSceneViewModel(scene));
            };

            ctx.SceneConnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                    {
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = true;
                    }
                }
            };

            ctx.SceneDisconnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                    {
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = false;
                    }
                }
            };

            ctx.RouteCreated += (Scene scene, Route route) =>
            {
                StormancerSceneViewModel sceneVM;
                if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                {
                    sceneVM.routes.TryAdd(route.Name, new StormancerRouteViewModel(route));
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (_clientVM != null && _clientVM.exportLogs == true)
                {
                    var pos     = packet.Stream.Position;
                    var message = new List <byte>();
                    var buffer  = new byte[1024];

                    int readByte = 0;
                    do
                    {
                        readByte = packet.Stream.Read(buffer, 0, 1024);
                        message.AddRange(buffer.Take(readByte));
                    }while (readByte > 0);
                    packet.Stream.Seek(pos, SeekOrigin.Begin);

                    var scene   = (Scene)packet.Metadata["scene"];
                    var routeId = (ushort)packet.Metadata["routeId"];

                    StormancerRouteViewModel routeVM = null;
                    StormancerSceneViewModel sceneVM = null;
                    string route = "";
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                    {
                        routeVM = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                    }
                    if (routeVM != null)
                    {
                        route = routeVM.Name;
                    }
                    if (route == "")
                    {
                        route = "system";
                    }
                    _clientVM.WritePacketLog(true, scene.Id, route, message);
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (packet.Metadata.ContainsKey("scene"))
                {
                    var scene = (Scene)packet.Metadata["scene"];
                    StormancerSceneViewModel sceneVM;
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                    {
                        var routeId = (ushort)packet.Metadata["routeId"];
                        var temp    = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                        if (temp != null)
                        {
                            StormancerEditorDataCollector.Instance.GetDataStatistics(packet.Stream, _clientVM, temp);
                        }
                    }
                }
            };
        }
 public InterceptorLogger(ILogger innerLogger, StormancerClientViewModel client)
 {
     _innerLogger = innerLogger;
     _clientVM    = client;
 }
        public void Build(PluginBuildContext ctx)
        {

            ctx.ClientCreated += client =>
            {
                var innerLoggerFactory = client.DependencyResolver.Resolve<ILogger>();
                _clientVM = new StormancerClientViewModel(client);
                _clientVM.id = _id;
                client.DependencyResolver.Register<ILogger>(() => new InterceptorLogger(innerLoggerFactory, _clientVM));
                StormancerEditorDataCollector.Instance.clients.TryAdd(_id, _clientVM);
            };

            ctx.ClientDestroyed += client =>
            {
                StormancerClientViewModel temp;
                StormancerEditorDataCollector.Instance.clients.TryRemove(_id, out temp);
            };

            ctx.SceneCreated += scene =>
           {
               _clientVM.scenes.TryAdd(scene.Id, new StormancerSceneViewModel(scene));
           };

            ctx.SceneConnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = true;
                }
            };

            ctx.SceneDisconnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = false;
                }
            };

            ctx.RouteCreated += (Scene scene, Route route) =>
            {
                StormancerSceneViewModel sceneVM;
                if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                {
                    sceneVM.routes.TryAdd(route.Name, new StormancerRouteViewModel(route));
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (_clientVM != null && _clientVM.exportLogs == true)
                {
                    var pos = packet.Stream.Position;
                    var message = new List<byte>();
                    var buffer = new byte[1024];

                    int readByte = 0;
                    do
                    {
                        readByte = packet.Stream.Read(buffer, 0, 1024);
                        message.AddRange(buffer.Take(readByte));
                    }
                    while (readByte > 0);
                    packet.Stream.Seek(pos, SeekOrigin.Begin);

                    var scene = (Scene)packet.Metadata["scene"];
                    var routeId = (ushort)packet.Metadata["routeId"];

                    StormancerRouteViewModel routeVM = null;
                    StormancerSceneViewModel sceneVM = null;
                    string route = "";
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                        routeVM = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                    if (routeVM != null)
                        route = routeVM.Name;
                    if (route == "")
                        route = "system";
                    _clientVM.WritePacketLog(true, scene.Id, route, message);
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (packet.Metadata.ContainsKey("scene"))
                {
                    var scene = (Scene)packet.Metadata["scene"];
                    StormancerSceneViewModel sceneVM;
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                    {
                        var routeId = (ushort)packet.Metadata["routeId"];
                        var temp = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                        if (temp != null)
                        {
                            StormancerEditorDataCollector.Instance.GetDataStatistics(packet.Stream, _clientVM, temp);
                        }
                    }
                }
            };
        }
Exemple #10
0
        public void Build(PluginBuildContext ctx)
        {
            ctx.ClientCreated += client =>
            {
                var innerLoggerFactory = client.DependencyResolver.GetComponent <ILogger>();
                _clientVM = new StormancerClientViewModel(client);
                client.DependencyResolver.RegisterComponent <ILogger>(() => new InterceptorLogger(innerLoggerFactory, _clientVM));
                StormancerEditorDataCollector.Instance.clients.TryAdd(_id, _clientVM);
            };

            ctx.ClientDestroyed += client =>
            {
                StormancerClientViewModel temp;
                StormancerEditorDataCollector.Instance.clients.TryRemove(_id, out temp);
            };

            ctx.SceneCreated += scene =>
            {
                _clientVM.scenes.TryAdd(scene.Id, new StormancerSceneViewModel(scene));
            };

            ctx.SceneConnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                    {
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = true;
                    }
                }
            };

            ctx.SceneDisconnected += scene =>
            {
                if (StormancerEditorDataCollector.Instance.clients.ContainsKey(_id))
                {
                    if (StormancerEditorDataCollector.Instance.clients[_id].scenes.ContainsKey(scene.Id))
                    {
                        StormancerEditorDataCollector.Instance.clients[_id].scenes[scene.Id].connected = false;
                    }
                }
            };

            ctx.RouteCreated += (Scene scene, Route route) =>
            {
                StormancerSceneViewModel sceneVM;
                if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                {
                    sceneVM.routes.TryAdd(route.Name, new StormancerRouteViewModel(route));
                }
            };

            ctx.PacketReceived += (Packet packet) =>
            {
                if (packet.Metadata.ContainsKey("scene"))
                {
                    var scene = (Scene)packet.Metadata["scene"];
                    StormancerSceneViewModel sceneVM;
                    if (_clientVM.scenes.TryGetValue(scene.Id, out sceneVM))
                    {
                        var routeId = (ushort)packet.Metadata["routeId"];
                        var temp    = sceneVM.routes.Values.FirstOrDefault(r => r.Handle == routeId);
                        if (temp != null)
                        {
                            temp.sizeStack  += packet.Stream.Length;
                            temp.messageNbr += 1;
                            if (temp.messageNbr == 1)
                            {
                                temp.averageSize = packet.Stream.Length;
                            }
                            else
                            {
                                temp.averageSize = (temp.averageSize * (temp.messageNbr - 1) + packet.Stream.Length) / temp.messageNbr;
                            }

                            if (temp.lastUpdate + 1000 < _clientVM.client.Clock)
                            {
                                if (temp.dataChart.Count >= 10800)
                                {
                                    temp.dataChart.RemoveAt(0);
                                }
                                if (temp.messageNbrChart.Count >= 10800)
                                {
                                    temp.messageNbrChart.RemoveAt(0);
                                }
                                if (temp.averageSizeChart.Count >= 10800)
                                {
                                    temp.averageSizeChart.RemoveAt(0);
                                }
                                temp.debit      = temp.sizeStack;
                                temp.lastUpdate = _clientVM.client.Clock;
                                temp.curve.AddKey(_clientVM.client.Clock, temp.sizeStack);
                                temp.dataChart.Add(temp.sizeStack);
                                temp.messageNbrChart.Add(temp.messageNbr);
                                temp.averageSizeChart.Add(temp.averageSize);

                                temp.messageNbr  = 0;
                                temp.averageSize = 0;
                                temp.sizeStack   = 0;
                            }
                        }
                    }
                }
            };
        }