コード例 #1
0
        public static void bgapi_exec(String cmd, String args)
        {
            if (bgWorker == null)
            {
                bg_watcher                   = new Timer(30 * 1000);
                bg_watcher.Elapsed          += new ElapsedEventHandler(bg_watcher_Elapsed);
                bgWorker                     = new BackgroundWorker();
                bgWorker.DoWork             += bgWorker_DoWork;
                bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
                bg_watcher.Start();
            }
            BGArgs newBGArgs = new BGArgs {
                args = args, cmd = cmd
            };

            lock (pending_bg_queue.SyncRoot) {
                if (bgWorker.IsBusy || pending_bg_queue.Count > 0)
                {
                    pending_bg_queue.Enqueue(newBGArgs);
                }
                else
                {
                    bgWorker.RunWorkerAsync(newBGArgs);
                }
            }
        }
コード例 #2
0
 static void bg_watcher_Elapsed(object sender, ElapsedEventArgs e)
 {
     if (current_exec != null && current_exec == last_exec_check)
     {
         MessageBox.Show("Warning freeswitch is most likely deadlocked, something has been pending in the bg queue for > 30 seconds, currently executing: " + current_exec.cmd + " " + current_exec.args);
     }
     last_exec_check = current_exec;
 }
コード例 #3
0
 static void bgWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     current_exec = (BGArgs)e.Argument;
     if (BGAPI == null)
     {
         BGAPI = new Api(null);
     }
     e.Result     = BGAPI.Execute(current_exec.cmd, current_exec.args);
     current_exec = null;
 }
コード例 #4
0
ファイル: Utils.cs プロジェクト: whins/FSAgent
 public static void bgapi_exec(String cmd, String args)
 {
     if (bgWorker == null) {
         bg_watcher = new Timer(30 * 1000);
         bg_watcher.Elapsed += new ElapsedEventHandler(bg_watcher_Elapsed);
         bgWorker = new BackgroundWorker();
         bgWorker.DoWork += bgWorker_DoWork;
         bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
         bg_watcher.Start();
     }
     BGArgs newBGArgs = new BGArgs { args = args, cmd = cmd };
     lock (pending_bg_queue.SyncRoot) {
         if (bgWorker.IsBusy || pending_bg_queue.Count > 0)
             pending_bg_queue.Enqueue(newBGArgs);
         else
             bgWorker.RunWorkerAsync(newBGArgs);
     }
 }
コード例 #5
0
        public bool BackGroundWorkerTask(System.ComponentModel.BackgroundWorker worker, object argument)
        {
            BGArgs        userState = (BGArgs)argument;
            OBJ           o         = new OBJ(File.ReadAllBytes(userState.filename));
            List <String> matnames  = new List <string>();

            foreach (var v in o.Faces)
            {
                if (!matnames.Contains(v.Material))
                {
                    matnames.Add(v.Material);
                }
            }
            UI.KCLCollisionTypeSelector ty = new UI.KCLCollisionTypeSelector(matnames.ToArray(), userState.filename);
            ty.loadMK7KCLInformations();
            ty.DialogResult = System.Windows.Forms.DialogResult.None;
            ty.ShowDialog();
            while (ty.DialogResult != System.Windows.Forms.DialogResult.OK)
            {
                ;
            }
            roundVertexPositions(o);
            Dictionary <string, ushort> Mapping;
            Dictionary <string, bool>   Colli;

            Mapping = ty.Mapping;
            Colli   = ty.Colli;
            List <Vector3>  Vertex    = new List <Vector3>();
            List <Vector3>  Normals   = new List <Vector3>();
            List <KCLPlane> planes    = new List <KCLPlane>();
            List <Triangle> Triangles = new List <Triangle>();

            userState.state    = 1;
            userState.currProg = 0;
            userState.totProg  = o.Faces.Count;
            foreach (var v in o.Faces)
            {
                if (Colli[v.Material])
                {
                    Triangle t  = new Triangle(o.Vertices[v.VertexIndieces[0]], o.Vertices[v.VertexIndieces[1]], o.Vertices[v.VertexIndieces[2]]);
                    Vector3  qq = (t.PointB - t.PointA).Cross(t.PointC - t.PointA);
                    if ((qq.X * qq.X + qq.Y * qq.Y + qq.Z * qq.Z) < 0.1)
                    {
                        continue;
                    }
                    KCLPlane p = new KCLPlane();
                    p.CollisionType = Mapping[v.Material];
                    Vector3 a = (t.PointC - t.PointA).Cross(t.Normal);
                    a.Normalize();
                    a = -a;
                    Vector3 b = (t.PointB - t.PointA).Cross(t.Normal);
                    b.Normalize();
                    Vector3 c = (t.PointC - t.PointB).Cross(t.Normal);
                    c.Normalize();
                    p.Length = (t.PointC - t.PointA).Dot(c);
                    int q = ContainsVector3(t.PointA, Vertex);
                    if (q == -1)
                    {
                        p.VertexIndex = (ushort)Vertex.Count; Vertex.Add(t.PointA);
                    }
                    else
                    {
                        p.VertexIndex = (ushort)q;
                    }
                    q = ContainsVector3(t.Normal, Normals);
                    if (q == -1)
                    {
                        p.NormalIndex = (ushort)Normals.Count; Normals.Add(t.Normal);
                    }
                    else
                    {
                        p.NormalIndex = (ushort)q;
                    }
                    q = ContainsVector3(a, Normals);
                    if (q == -1)
                    {
                        p.NormalAIndex = (ushort)Normals.Count; Normals.Add(a);
                    }
                    else
                    {
                        p.NormalAIndex = (ushort)q;
                    }
                    q = ContainsVector3(b, Normals);
                    if (q == -1)
                    {
                        p.NormalBIndex = (ushort)Normals.Count; Normals.Add(b);
                    }
                    else
                    {
                        p.NormalBIndex = (ushort)q;
                    }
                    q = ContainsVector3(c, Normals);
                    if (q == -1)
                    {
                        p.NormalCIndex = (ushort)Normals.Count; Normals.Add(c);
                    }
                    else
                    {
                        p.NormalCIndex = (ushort)q;
                    }
                    planes.Add(p);
                    Triangles.Add(t);
                }
                userState.currProg++;
                worker.ReportProgress(0, userState);
                if (worker.CancellationPending)
                {
                    return(false);
                }
            }
            Vertices     = Vertex.ToArray();
            this.Normals = Normals.ToArray();
            Planes       = planes.ToArray();
            Header       = new MK7KCLHeader();
            Octree       = KCLOctree.FromTriangles(Triangles.ToArray(), Header, 2048, 128, 32, 10, userState, worker);
            if (Octree == null)
            {
                return(false);
            }
            return(true);
        }
コード例 #6
0
ファイル: Utils.cs プロジェクト: whins/FSAgent
 static void bg_watcher_Elapsed(object sender, ElapsedEventArgs e)
 {
     if (current_exec != null && current_exec == last_exec_check)
         MessageBox.Show("Warning freeswitch is most likely deadlocked, something has been pending in the bg queue for > 30 seconds, currently executing: " + current_exec.cmd + " " + current_exec.args);
     last_exec_check = current_exec;
 }
コード例 #7
0
ファイル: Utils.cs プロジェクト: whins/FSAgent
 static void bgWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     current_exec = (BGArgs)e.Argument;
     if (BGAPI == null)
         BGAPI = new Api();
     e.Result = BGAPI.Execute(current_exec.cmd, current_exec.args);
     current_exec = null;
 }