Advertisement
rohitvk

native-app-windows

Jan 30th, 2014
452
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <math.h>
  5. #include <stdlib.h>
  6. #include "ScreenShare.h"
  7. #include "Log.h"
  8.  
  9. #define MAX_SIZE 200
  10.  
  11. LOG_DECLARE;
  12.  
  13. enum Method_Name
  14. {
  15.     ENCODE_FRAME,
  16.     ENCODE_FRAME_DIFFERENCE
  17. };
  18.  
  19. std::string encode_Frame(ScreenShare&, long*, long*, int*);
  20. std::string encode_Frame_Difference(ScreenShare&, long*, long*, int*);
  21.  
  22. void init_Logging();
  23. std::string get_Message();
  24. Method_Name parse_Message(std::string);
  25.  
  26. // Optional Parameters : data=> indexing/appshare | opt1=> width/mouseX | opt2=> height/mouseY | opt3=> appshareLength //
  27. std::string make_final_JSON(Method_Name, char* data="", char* op1="", char* op2="", char* opt3="");
  28.  
  29. char* strip_CR(char*,int);
  30. void send_Final_Message(std::string);
  31.  
  32. int main() {
  33.  
  34.     std::cout.setf( std::ios_base::unitbuf );
  35.  
  36.     init_Logging();
  37.  
  38.     ScreenShare ss;
  39.  
  40.     long mouseX, mouseY;
  41.     int encodeLength, count=0;
  42.     std::string input, final_json;
  43.    
  44.     do {
  45.         input = get_Message();
  46.  
  47.         LOG_INFO((char*)input.c_str());
  48.  
  49.         Method_Name methodName = parse_Message(input);
  50.  
  51.         switch(methodName) {
  52.  
  53.             case ENCODE_FRAME: final_json = encode_Frame(ss, &mouseX, &mouseY, &encodeLength);
  54.             break;
  55.  
  56.             case ENCODE_FRAME_DIFFERENCE: final_json = encode_Frame_Difference(ss, &mouseX, &mouseY, &encodeLength);
  57.             break;
  58.  
  59.                        //default:  LOG_ERR("Invalid Method Name");
  60.  
  61.         }
  62.        
  63.         LOG_INFO("Sending final Json..");
  64.  
  65.         send_Final_Message(final_json);
  66.              
  67.     } while(1);
  68.  
  69.     return 0;
  70.  
  71. }//END_OF_MAIN
  72. /////////////////////////////////////////////////////////////////////////////////////////
  73.  
  74. void send_Final_Message(std::string final_msg) {
  75.  
  76.         unsigned int len = final_msg.length();
  77.  
  78.         //Sending 4bytes of length information
  79.          std::cout  << char(((len>>0) & 0xFF))
  80.                     << char(((len>>8) & 0xFF))
  81.                     << char(((len>>16) & 0xFF))
  82.                     << char(((len>>24) & 0xFF));
  83.  
  84.         // Now we can output our message
  85.         std::cout << final_msg;
  86.  
  87.         //fwrite(&len, 4, 1, stdout);  //Sending 4bytes of length information
  88.         //fwrite(final_msg.c_str(), len, 1, stdout); // Now we can output our message
  89.  
  90.         final_msg.clear();
  91. }
  92.  
  93. std::string make_final_JSON(Method_Name method, char* data, char* opt1, char* opt2, char* opt3) {
  94.  
  95.         std::string final_json;
  96.  
  97.         switch(method) {
  98.  
  99.             case ENCODE_FRAME: LOG_INFO("Make_FINAL_JSON:: ENCODE_FRAME ..");
  100.  
  101.                 final_json.append("{\"result\":\"encodeFrame\", \"value\":");                      
  102.                 final_json.append("{\"mouseX\":\"");
  103.                 final_json.append(opt1);
  104.                 final_json.append("\",\"mouseY\":\"");
  105.                     final_json.append(opt2);
  106.                 final_json.append("\",\"length\":\"");
  107.                 final_json.append(opt3);
  108.                 final_json.append("\",\"data\":\"");
  109.                 final_json.append(data);
  110.             break;
  111.  
  112.             case ENCODE_FRAME_DIFFERENCE:LOG_INFO("Make_FINAL_JSON:: ENCODE_FRAME_DIFFERENCE ..");
  113.  
  114.                 final_json.append("{\"result\":\"encodeFrameDifference\", \"value\":");
  115.                 final_json.append("{\"mouseX\":\"");
  116.                 final_json.append(opt1);
  117.                 final_json.append("\",\"mouseY\":\"");
  118.                 final_json.append(opt2);
  119.                 final_json.append("\",\"length\":\"");
  120.                 final_json.append(opt3);
  121.                 final_json.append("\",\"data\":\"");
  122.                 final_json.append(data);
  123.                 break;
  124.         }
  125.  
  126.         final_json.append("\"}}");
  127.  
  128.         if(data != NULL) {
  129.             delete data;
  130.             data=NULL;
  131.         }
  132.         if(opt1!=NULL) { delete opt1; opt1=NULL; }
  133.         if(opt2!=NULL) { delete opt2; opt2=NULL; }
  134.         if(opt3!=NULL) { delete opt3; opt3=NULL; }
  135.  
  136.         return final_json;
  137. }
  138.  
  139. Method_Name parse_Message(std::string msg) {
  140.    
  141.     Method_Name method  = ENCODE_FRAME_DIFFERENCE;
  142.  
  143.     if (msg.find("xencodeFrame") != std::string::npos) {
  144.         method = ENCODE_FRAME;
  145.     }
  146.     else if (msg.find("encodeFrameDifference") != std::string::npos) {
  147.         method = ENCODE_FRAME_DIFFERENCE;
  148.     }
  149.     return method;
  150. }
  151.  
  152. std::string get_Message() {
  153.  
  154.     LOG_DEBUG("Getting message from extension.. ");
  155.  
  156.     unsigned int input_length=0, a, ch, length = 0;
  157.     int i;
  158.     input_length=0;
  159.     std::string input;
  160.  
  161.         for (i = 0; i<= 3; i++) {
  162.             input_length += pow(256.0f, i) *getchar();
  163.         }
  164.    
  165.         for (a=0; a < input_length; a++) {
  166.             ch = getchar();
  167.             input += ch;
  168.         }
  169.  
  170.         return input;
  171. }
  172.  
  173. char* strip_CR(char *s, int len)
  174. {
  175.     char *p = new char[len+1];
  176.     if(p) {
  177.         char *p2 = p;
  178.         while(*s != '\0') {
  179.             if(*s != '\r' && *s != '\n') {
  180.                 *p2++ = *s++;
  181.             } else {
  182.                 ++s;
  183.             }
  184.         }
  185.         *p2 = '\0';
  186.     }
  187.     return p;
  188. }
  189.  
  190. std::string encode_Frame(ScreenShare& ss,  long* mouseX, long* mouseY,
  191.                                         int* encodedLength) {
  192.         LOG_INFO("inside encode_Frame ... ");
  193.         char sMouseX[10], sMouseY[10], bufferLength[10];
  194.         unsigned int length = 0;
  195.  
  196.         unsigned char* data = ss.encodeFrame(
  197.                                 mouseX, mouseY, encodedLength);
  198.  
  199.         char* sNewTempEncodedData = ss.base64Encode(data, *encodedLength, &length);
  200.            
  201.         char* clean_data = strip_CR(sNewTempEncodedData, length);
  202.  
  203.         //Converting long/int to string
  204.         sprintf( sMouseX, "%ld", *mouseX );
  205.         sprintf( sMouseY, "%ld", *mouseY );
  206.         sprintf( bufferLength, "%d", *encodedLength );
  207.  
  208.         LOG_DEBUG("E.F. Length we're sending...");
  209.         LOG_DEBUG(bufferLength);
  210.  
  211.         return make_final_JSON(ENCODE_FRAME, clean_data, sMouseX, sMouseY, bufferLength);
  212. }
  213.  
  214. std::string encode_Frame_Difference(ScreenShare& ss, long* mouseX, long* mouseY,
  215.                                         int* encodedLength) {
  216.         LOG_INFO("inside encode_Frame_Difference ... ");
  217.         char sMouseX[10], sMouseY[10], bufferLength[10];
  218.         unsigned int length = 0;
  219.  
  220.         unsigned char* data = ss.encodeFrameDifference(
  221.                                 mouseX, mouseY, encodedLength);
  222.  
  223.         char* sNewTempEncodedData = ss.base64Encode(data, *encodedLength, &length);
  224.            
  225.         char* clean_data = strip_CR(sNewTempEncodedData, length);
  226.  
  227.         //Converting long to string
  228.         sprintf( sMouseX, "%ld", *mouseX );
  229.         sprintf( sMouseY, "%ld", *mouseY );
  230.         sprintf( bufferLength, "%d", *encodedLength );
  231.  
  232.         LOG_DEBUG("E.F.D. Length we're sending...");
  233.         LOG_DEBUG(bufferLength);
  234.  
  235.         return make_final_JSON(ENCODE_FRAME_DIFFERENCE, clean_data, sMouseX, sMouseY, bufferLength);
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement