Example #1
0
 private void EnqueueMessage(Byte a, Byte b)
 {
     byte[] b_int16 = new byte[2];
     b_int16[0] = a;
     b_int16[1] = b;
     Sender_Queue.Enqueue(b_int16);
 }
        void LastFileBlockSent()
        {
            if (bFile_Transfer_In_Progress)
            {
                for (Int32 counter = 0; counter < File_Transfer_Blocks.Length; counter++)
                {
                    if (File_Transfer_Blocks[counter] == false)
                    {
                        EnqueueMessage(0, FILE_MISSING_BLOCK);
                        if (bFILE_TRANSFER_LOGGING)
                        {
                            textBox_Log_Update(String.Format("Resend={0}", counter));
                        }

                        byte[] b_int32 = BitConverter.GetBytes(counter);
                        Sender_Queue.Enqueue(b_int32);
                        return;
                    }
                }
                EnqueueMessage(0, FILE_TRANSFER_DONE);
                File_Transfer_Writer.Close();
                bFile_Transfer_In_Progress = false;
                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update("File transfer completed");
                }
            }
        }
        private void ReceiveFileBlock()
        {
            byte[] b_int32 = new byte[4];
            byte[] b_int16 = new byte[2];

            if (bFile_Transfer_In_Progress)
            {
                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update("ReceiveFileBlock()");
                }

                ReadData(ref b_int32);
                Int32 block = BitConverter.ToInt32(b_int32, 0);
                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update(String.Format("block={0}", block));
                }

                ReadData(ref b_int32);
                Int16 blocksize = BitConverter.ToInt16(b_int32, 0);
                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update(String.Format("blocksize={0}", blocksize));
                }


                byte[] buffer = new byte[blocksize];
                ReadData(ref buffer);



                try
                {
                    File_Transfer_Writer.Seek(block * 1024, SeekOrigin.Begin);
                    File_Transfer_Writer.Write(buffer);
                    File_Transfer_Blocks[block] = true;
                }
                catch (Exception ex)
                {
                    EnqueueMessage(0, STOP_FILE_TRANSFER);
                    MessageBox.Show(ex.Message, "Error writing file");
                    return;
                }

                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update("Sent Ack Block: " + block.ToString());
                }


                List <Byte> BufferList = new List <Byte>();
                Byte[]      message    = new byte[2];
                message[0] = 0;
                message[1] = FILE_TRANSFER_ACK_BLOCK;
                BufferList.AddRange(message);
                b_int32 = BitConverter.GetBytes(block);
                BufferList.AddRange(b_int32);
                Sender_Queue.Enqueue(BufferList.ToArray());
                BufferList.Clear();



                //EnqueueMessage(0, FILE_TRANSFER_ACK_BLOCK);
            }
            else
            {
                if (bFILE_TRANSFER_LOGGING)
                {
                    textBox_Log_Update("No File transfer in progress, sending stop");
                }
                EnqueueMessage(0, STOP_FILE_TRANSFER);
            }
        }
        void SendFullScreen()
        {
            //tcpclnt.Connected;


            CURSORINFO pci;

            pci.cbSize = Marshal.SizeOf(typeof(CURSORINFO));
            int cursor_x = 0;
            int cursor_y = 0;

            // Validate the screen size.  It can change
            if (rect_ScreenDimensions != GetScreenSize())
            {
                bmp_LastScreenShot.Dispose();
                bmp_CurrentScreenShot.Dispose();
                InitializeBMP();
            }
            try
            {
                // Get screenshow in NewScreenShot
                using (Graphics h = Graphics.FromImage(bmp_LastScreenShot))
                {
                    h.CopyFromScreen(rect_ScreenDimensions.X, rect_ScreenDimensions.Y, 0, 0, bmp_LastScreenShot.Size);        // Update the Diff since we are going to send the entire screen
                    Bitmap cursor = CaptureCursor(ref cursor_x, ref cursor_y);
                    if (cursor != null)
                    {
                        h.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                        h.DrawImage(cursor, cursor_x, cursor_y);
                    }
                }



                // Send the full screen image
                if (tcpConnection.Connected)
                {
                    using (MemoryStream bitmap_Stream = new MemoryStream())
                    {
                        bmp_LastScreenShot.Save(bitmap_Stream, JPG_codecInfo, JPG_parameters);                                                       // Save to memory Stream


                        List <Byte> BufferList = new List <Byte>();

                        // Set message type
                        Byte[] message = new byte[2];
                        message[0] = 0;
                        message[1] = FULL_SCREEN_JPG;                    // Type 1 is JPG full screenshot
                        BufferList.AddRange(message);

                        // send size and data
                        Byte[] bmp_array     = bitmap_Stream.GetBuffer();       // Get array from stream
                        Int32  length        = bmp_array.Length;                // get length
                        byte[] length_buffer = BitConverter.GetBytes(length);   // convert length to byte array
                        BufferList.AddRange(length_buffer);
                        BufferList.AddRange(bmp_array);


                        Byte[] Buffer = BufferList.ToArray();
                        Sender_Queue.Enqueue(Buffer);
                    }
                }
            }
            catch (Exception e)
            {
                textBox_Log_Update("SendScreen:  " + e.Message);
            }
        }
        void Screen_SendSquare(int SX, int SY)
        {
            Graphics g = Graphics.FromImage(bmp_Square);

            g.DrawImage(bmp_CurrentScreenShot, 0, 0, new Rectangle(SX * SquareSize, SY * SquareSize, SquareSize, SquareSize), GraphicsUnit.Pixel);
            g.Dispose();


            MemoryStream jpg_Stream = new MemoryStream();
            MemoryStream png_Stream = new MemoryStream();


            try
            {
                bmp_Square.Save(jpg_Stream, JPG_codecInfo, JPG_parameters);
            }
            catch (Exception e)
            {
                textBox_Log_Update("Sendsquare JPG Encoder error: " + e.Message);
                return;
            }

            bmp_Square.Save(png_Stream, ImageFormat.Png);


            // Get bitmap data
            Byte[] jpg_array = jpg_Stream.GetBuffer();
            Byte[] png_array = png_Stream.GetBuffer();

            // Send data length
            Int32 jpg_length = jpg_array.Length;
            Int32 png_length = png_array.Length;


            // Send the type for the data
            List <Byte> BufferList = new List <Byte>();

            Byte[] message = new byte[2];
            byte[] length_buffer;

            if (png_length < jpg_length)
            {
                message[0]    = 0;
                message[1]    = PNG_SQUARE;                 // Type 2 is a JPG square
                length_buffer = BitConverter.GetBytes(png_length);
            }
            else
            {
                message[0]    = 0;
                message[1]    = JPG_SQUARE;                 // Type 2 is a JPG square
                length_buffer = BitConverter.GetBytes(jpg_length);
            }
            //textBox_Log_Update(String.Format("JPG: {0}  PNG:{1}", jpg_length, png_length));


            BufferList.AddRange(message);

            // Get the X,Y Location
            Byte[] bmp_Int32 = new byte[4];
            Int32  X         = SX * SquareSize;

            bmp_Int32 = BitConverter.GetBytes(X);
            BufferList.AddRange(bmp_Int32);

            Int32 Y = SY * SquareSize;

            bmp_Int32 = BitConverter.GetBytes(Y);
            BufferList.AddRange(bmp_Int32);


            // Send length
            BufferList.AddRange(length_buffer);


            // send image data
            if (png_length < jpg_length)
            {
                BufferList.AddRange(png_array);
            }
            else
            {
                BufferList.AddRange(jpg_array);
            }

            // Enqueue data
            byte[] buffer = BufferList.ToArray();
            Sender_Queue.Enqueue(buffer);

            BufferList.Clear();

            jpg_Stream.Dispose();
            png_Stream.Dispose();
        }