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(); }