private void Stop(NetworkStream ns)
        {
            string contentString = "Stopped";

            WowAutomater.RemoteStop();

            string responseString = "HTTP/1.1 200 OK\r\n";

            responseString += "Content-Length: " + contentString.Length.ToString() + "\r\n";
            responseString += "Content-Type: text/html\r\n";
            responseString += "Connection: Closed\r\n\r\n";
            responseString += contentString;

            ns.Write(ASCIIEncoding.ASCII.GetBytes(responseString), 0, responseString.Length);
        }
Exemple #2
0
        private void ConnectToRemote(string host, string user)
        {
            byte[] loginBytes = new byte[LOGIN_LENGTH];

            loginBytes[0] = LOGIN_BYTE_1;
            loginBytes[1] = LOGIN_BYTE_2;

            Array.Copy(ASCIIEncoding.ASCII.GetBytes(user), 0, loginBytes, 2, user.Length);

            try
            {
                using (TcpClient tcpClient = new TcpClient(host, PORT))
                {
                    tcpClient.NoDelay = true;

                    using (NetworkStream ns = tcpClient.GetStream())
                    {
                        ns.Write(loginBytes, 0, loginBytes.Length);

                        byte[] dataBuffer = new byte[READ_BUFFER_LENGTH];

                        while (true)
                        {
                            while (tcpClient.Available == 0 && !m_StopRemote && tcpClient.Connected)
                            {
                                if (tcpClient.Client.Poll(0, SelectMode.SelectRead))
                                {
                                    byte[] buff = new byte[1];
                                    if (tcpClient.Client.Receive(buff, SocketFlags.Peek) == 0)
                                    {
                                        m_StopRemote = true;
                                    }
                                }

                                System.Threading.Thread.Sleep(10);
                            }

                            if (m_StopRemote || !tcpClient.Connected)
                            {
                                break;
                            }

                            byte command = (byte)ns.ReadByte();

                            switch (command)
                            {
                            case BAD_LOGIN_BYTE:
                            {
                                throw new Exception("User not found");
                            }

                            case LOGIN_BYTE:
                            {
                                ns.WriteByte(LOGIN_BYTE);

                                SetRemoteWebInterfaceButtonStyle(true);

                                break;
                            }

                            case START_BYTE:
                            {
                                ns.WriteByte(START_BYTE);

                                WowAutomater.RemoteStart();

                                break;
                            }

                            case STOP_BYTE:
                            {
                                ns.WriteByte(STOP_BYTE);

                                WowAutomater.RemoteStop();

                                break;
                            }

                            case SCREEN_BYTE:
                            {
                                ns.WriteByte(SCREEN_BYTE);

                                ns.ReadByte();

                                byte[] jpegBytes = GetScreenJpegBytes();

                                int jpegSize = jpegBytes.Length;

                                byte[] sizeBytes = BitConverter.GetBytes(jpegSize);

                                ns.Write(sizeBytes, 0, sizeBytes.Length);

                                ns.ReadByte();

                                ns.Write(jpegBytes, 0, jpegBytes.Length);

                                break;
                            }

                            case RELAY_BYTE:
                            {
                                ns.WriteByte(RELAY_BYTE);

                                int    bread    = ns.Read(dataBuffer, 0, dataBuffer.Length);
                                byte[] dataRead = new byte[bread];
                                Array.Copy(dataBuffer, dataRead, bread);

                                string relayString = ASCIIEncoding.ASCII.GetString(dataRead);

                                WowAutomater.SetRelayString(relayString);

                                break;
                            }

                            default:
                            {
                                throw new Exception("BAD COMMAND");
                            }
                            }
                        }
                    }
                }
            }
            catch (Exception err)
            {
                SetRemoteWebInterfaceButtonStyle(false);
                m_RemoteConnected = false;
                MessageBox.Show(err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            remotewait.Set();
        }