Esempio n. 1
0
        private void ListeningServerLaunchClientThreads()
        {
            TcpListener listener = new TcpListener(IPAddress.Any, _port);

            bool done_listening = false;

            while (!done_listening)
            {
                SetText("Server : Launched listening at port = " + _port + "..\r\n");
                listener.Start();

                Socket socket = listener.AcceptSocket();
                socket.ReceiveTimeout = 60000000;

                SetText("Server : Client connection accepted..\r\n");

                displayControl dc = (displayControl)_manageDispCtrl.getAvailableDisplayNotInUse();
                if (dc == null)
                {
                    SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : All screens occupied cannot add more connections. **ERROR** ..\r\n");
                    continue;
                }

                Thread thNewClient = new Thread(networkByteStreamToMatFrame);
                thNewClient.Start(socket);
            }
        }
Esempio n. 2
0
        public void InitializeDispCtrls(object pan, object cib)
        {
            displayControl dc = new displayControl();

            dc._ctrl  = (Panel)pan;
            dc._cibox = (ImageBox)cib;
            dc.inUse  = false;


            ////
            ((System.ComponentModel.ISupportInitialize)(dc._cibox)).BeginInit();
            dc._ctrl.Controls.Add((ImageBox)cib);
            dc._cibox.Dock     = System.Windows.Forms.DockStyle.Fill;
            dc._cibox.Location = new System.Drawing.Point(0, 0);
            dc._cibox.Margin   = new System.Windows.Forms.Padding(4, 5, 4, 5);
            dc._cibox.Name     = "captureImageBox" + (++nCounter);
            dc._cibox.Size     = new System.Drawing.Size(298, 202);
            dc._cibox.TabIndex = 1;
            dc._cibox.TabStop  = false;
            ((System.ComponentModel.ISupportInitialize)(dc._cibox)).EndInit();

            dc.id = _displayCtrl.Count + 1;

            _displayCtrl.Add(dc);
        }
Esempio n. 3
0
        private void networkByteStreamToMatFrame(object sock)
        {
            Socket socket = (Socket)sock;

            byte[] extaLeftOver = { };

            bool done         = false;
            int  lastfilesize = 0;

            SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Streaming Started..\r\n");

            displayControl dc = (displayControl)_manageDispCtrl.getAvailableDisplayNotInUse();

            if (dc == null)
            {
                SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : All screens occupied cannot add more connections. **ERROR** ..\r\n");
                return;
            }
            _cibox = (dc)._cibox;
            _manageDispCtrl.setDisplayIndexInUSe(_cibox);

            SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : delegated to screen  [" + dc.id + "]..\r\n");

            //ImageBox im3 = ((displayControl)_manageDispCtrl.getAvailableDisplayNotInUse())._cibox;

            //_manageDispCtrl.setDisplayIndexInUSe(im3);

            //ImageBox im4 = ((displayControl)_manageDispCtrl.getAvailableDisplayNotInUse())._cibox;

            //_manageDispCtrl.setDisplayIndexInUSe(im4);

            while (!done)
            {
                Dictionary <string, string> headers = new Dictionary <string, string>();

                if (extaLeftOver.Length == 0)
                {
                    try
                    {
                        socket.Receive(header);
                    }
                    catch (ObjectDisposedException ode)
                    {
                        done = true;
                    }
                    catch (SocketException se)
                    {
                        if (se.ErrorCode == 10054)
                        {
                            socket.Close();
                        }

                        done = true;
                    }
                }
                else
                {
                    byte[] headerExtracted = SubArray(extaLeftOver, 0, 1024); // assuming constant hearder size 1024
                    byte[] streamBuffer    = SubArray(extaLeftOver, 1024, extaLeftOver.Length - 1024);
                }

                //SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Header received..\r\n");

                string headerStr = Encoding.ASCII.GetString(header);


                string[] splitted = headerStr.Split(new string[] { "\r\n" }, StringSplitOptions.None);

                foreach (string s in splitted)
                {
                    if (s.Contains(":"))
                    {
                        headers.Add(s.Substring(0, s.IndexOf(":")), s.Substring(s.IndexOf(":") + 1));
                    }
                }


                try
                {
                    int filesize = Convert.ToInt32(headers["Content-length"]);
                    //Get filesize from header

                    if (filesize != lastfilesize)
                    {
                        SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Updated file size = " + filesize + "..\r\n");
                        Array.Resize(ref buffer, filesize);
                    }


                    lastfilesize = filesize;

                    byte[] temp = { };

                    int recvsize = 0;
                    while (recvsize < filesize)
                    {
                        int size = socket.Receive(buffer, SocketFlags.None);
                        if (size > filesize - recvsize)
                        {
                            int wastedBytes = (size - (filesize - recvsize));
                            //SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Data Wasted = " + wastedBytes + "....\r\n");

                            size         = filesize - recvsize;
                            extaLeftOver = SubArray(buffer, size - 1, wastedBytes);
                        }

                        temp      = temp.Concat(buffer.Take(size)).ToArray();
                        recvsize += size;
                    }


                    _cibox.Image = _camMemSerialDeserial.Deserialize <matFrameWrapper>(temp).MyProperty;

                    string ackString = "DONE";
                    byte[] ackFrame  = new byte[ackString.Length];
                    Array.Copy(Encoding.ASCII.GetBytes(ackString), ackFrame, Encoding.ASCII.GetBytes(ackString).Length);

                    socket.Send(ackFrame);
                }
                catch (Exception e)
                {
                    continue;
                }
            }

            SetText("Server[" + Thread.CurrentThread.ManagedThreadId + "] : Streaming Stopped..\r\n");
            _manageDispCtrl.ResetDisplayIndexInUSe(_cibox);
        }