public void ClosePort()
 {
     state=ThreadStates.STOP;
     listener.Close();
     if(msocket!=null)
         msocket.Close();
 }
 public void ClosePort()
 {
     state = ThreadStates.STOP;
     listener.Close();
     if (msocket != null)
     {
         msocket.Close();
     }
 }
        public void ThreadProc()
        {
            while (state != ThreadStates.STOP)
            {
                switch (state)
                {
                case ThreadStates.LISTEN:
                    try
                    {
                        Listen();
                    }
                    catch (Exception e) {
                        state = ThreadStates.STOP;
                    }
                    break;

                case ThreadStates.RECIEVE:
                    try
                    {
                        RecievePacket();
                    }
                    catch (Exception e) {
                        if (state != ThreadStates.STOP)
                        {
                            state = ThreadStates.LISTEN;
                        }
                    }
                    break;
                }
            }

            if (blockthreadflag)
            {
                blockedthread.Resume();
            }

            blockthreadflag = false;
            blockedthread   = null;

            FreeSocket();
            rmqueue = null;

            listener = null;
        }
        public void Initialize(int mport)
        {
            rmqueue         = Queue.Synchronized(new Queue(10));
            mthread         = new Thread(new ThreadStart(this.ThreadProc));
            state           = ThreadStates.LISTEN;
            isconnected     = false;
            blockthreadflag = false;

            listener = new Socket(AddressFamily.InterNetwork,
                                  SocketType.Stream, ProtocolType.Tcp);
            listener.Bind(new IPEndPoint(IPAddress.Any, mport));

            EchoMessage("listening on port " +
                        ((IPEndPoint)listener.LocalEndPoint).Port.ToString()
                        + " for " + devicename);

            listener.Listen(1);
            mthread.Start();
        }
        private void Listen()
        {
            FreeSocket();
            rmqueue.Clear();

            msocket = listener.Accept();

            EchoMessage(devicename + " is connected.");
            mstream     = new NetworkStream(msocket, true);
            isconnected = true;
            state       = ThreadStates.RECIEVE;

            if (blockthreadflag)
            {
                blockthreadflag = false;
                blockedthread.Resume();
                blockedthread = null;
            }
        }
        public void Initialize(int mport)
        {
            rmqueue = Queue.Synchronized(new Queue(10));
            mthread =  new Thread(new ThreadStart(this.ThreadProc));
            state=ThreadStates.LISTEN;
            isconnected=false;
            blockthreadflag = false;

            listener=new Socket(AddressFamily.InterNetwork,
                SocketType.Stream,ProtocolType.Tcp);
            listener.Bind(new IPEndPoint(IPAddress.Any,mport));

            EchoMessage("listening on port " +
                ((IPEndPoint)listener.LocalEndPoint).Port.ToString()
                + " for " + devicename);

            listener.Listen(1);
            mthread.Start();
        }
        private void Listen()
        {
            FreeSocket();
            rmqueue.Clear();

            msocket = listener.Accept();

            EchoMessage(devicename + " is connected.");
            mstream = new NetworkStream(msocket,true);
            isconnected =true;
            state = ThreadStates.RECIEVE;

            if(blockthreadflag){
                blockthreadflag=false;
                blockedthread.Resume();
                blockedthread=null;
            }
        }
        public void ThreadProc()
        {
            while(state!=ThreadStates.STOP)
            {
                switch(state)
                {

                    case ThreadStates.LISTEN:
                        try
                        {
                            Listen();
                        }
                        catch(Exception e){
                            state=ThreadStates.STOP;
                        }
                        break;

                    case ThreadStates.RECIEVE:
                        try
                        {
                            RecievePacket();
                        }
                        catch(Exception e){
                            if(state!=ThreadStates.STOP)
                                state=ThreadStates.LISTEN;
                        }
                        break;

                }
            }

            if(blockthreadflag)
                blockedthread.Resume();

            blockthreadflag=false;
            blockedthread=null;

            FreeSocket();
            rmqueue=null;

            listener = null;
        }