[Avidemux-svn-commit] r6786 - in branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket: include src

mean at mail.berlios.de mean at mail.berlios.de
Sat Nov 27 09:01:45 CET 2010


Author: mean
Date: 2010-11-27 09:01:45 +0100 (Sat, 27 Nov 2010)
New Revision: 6786

Modified:
   branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/include/ADM_coreCommandSocket.h
   branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreCommandSocket.cpp
   branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreSocket.cpp
Log:
[jobs/socket] Return and processjob status

Modified: branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/include/ADM_coreCommandSocket.h
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/include/ADM_coreCommandSocket.h	2010-11-27 08:01:44 UTC (rev 6785)
+++ branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/include/ADM_coreCommandSocket.h	2010-11-27 08:01:45 UTC (rev 6786)
@@ -55,6 +55,13 @@
         virtual ADM_commandSocket *waitForConnect(uint32_t timeoutMs);
         bool sendMessage(const ADM_socketMessage &msg);
         bool getMessage(ADM_socketMessage &msg);
+        bool pollMessage(ADM_socketMessage &msg);
+        bool handshake(void);
+        bool isAlive(void)
+                {
+                    if(mySocket) return true;
+                    return false;
+                }
     public:
         ADM_commandSocket(int newSocket);
         ADM_commandSocket( void );

Modified: branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreCommandSocket.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreCommandSocket.cpp	2010-11-27 08:01:44 UTC (rev 6785)
+++ branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreCommandSocket.cpp	2010-11-27 08:01:45 UTC (rev 6786)
@@ -28,7 +28,7 @@
 }
 static bool     char_to_uint32(uint32_t *v,uint8_t *p)
  {
-    uint32_t a=(p[0])+(p[1]<<8)+(p[2]<<16)+(p[4]<<24);
+    uint32_t a=(p[0])+(p[1]<<8)+(p[2]<<16)+(p[3]<<24);
     *v=a;
     return true;
 }
@@ -107,6 +107,48 @@
     return true;
 }
 /**
+    \fn pollMessage
+*/
+bool ADM_commandSocket::pollMessage(ADM_socketMessage &msg)
+{
+//
+        if(!mySocket)
+        {
+            ADM_error("Wait for connect called with no socket opened\n");
+            return NULL;        
+        }
+    // Wait for connect...
+        fd_set set,er;
+        FD_ZERO(&set);
+        FD_ZERO(&er);
+        FD_SET(mySocket,&set);
+        FD_SET(mySocket,&er);
+        struct timeval timeout; 
+
+        timeout.tv_sec=0;
+        timeout.tv_usec=10*1000; // us
+        //ADM_info("Selecting\n");
+        int evt=select(1+mySocket,&set,NULL,&er,&timeout);
+        if(evt<0) 
+        {
+            ADM_error("Socket disconnected\n");
+            close();
+            return false;
+        }
+        
+        if(FD_ISSET(mySocket,&er))
+        {
+            ADM_error("OOPs socket is in error\n");
+        }
+        if(!evt)
+        {
+            printf(".");
+            return false;
+        }
+        return getMessage(msg);
+}
+
+/**
     \fn getPayloadAsUint32_t
 */
 bool     ADM_socketMessage::getPayloadAsUint32_t(uint32_t *v)
@@ -140,4 +182,39 @@
 #warning fixme badly
     return (ADM_commandSocket *)ADM_socket::waitForConnect(timeoutMs);
 }
+/**
+    \fn handshake
+*/
+bool ADM_commandSocket::handshake(void)
+{
+    uint32_t version;
+    ADM_info("Waiting for hello message...\n");
+    ADM_socketMessage msg;
+    msg.setPayloadAsUint32_t(ADM_COMMAND_SOCKET_VERSION);
+    msg.command=ADM_socketCommand_Hello;
+    if(!sendMessage(msg))
+    {
+        ADM_error("Cannot send hello message");
+        goto done;
+    }
+    if(!getMessage(msg))
+    {
+        ADM_error("Cannot get hello message");
+        goto done;
+    }
+    if(msg.command!=ADM_socketCommand_Hello)
+    {
+        ADM_error("Replys is not a hello \n");
+        goto done;
+    }
+    if(!msg.getPayloadAsUint32_t(&version) || version!=ADM_COMMAND_SOCKET_VERSION)
+    {
+        ADM_error("Wrong command version\n");
+        goto done;
+    }
+    ADM_info("Got hello message, continuing...\n");
+    return true;
+done:
+    return false;
+}
 // EOF
\ No newline at end of file

Modified: branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreSocket.cpp
===================================================================
--- branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreSocket.cpp	2010-11-27 08:01:44 UTC (rev 6785)
+++ branches/avidemux_2.6_branch_mean/avidemux_core/ADM_coreSocket/src/ADM_coreSocket.cpp	2010-11-27 08:01:45 UTC (rev 6786)
@@ -110,15 +110,16 @@
     while(got<howmuch)
     {
         rx=recv(mySocket,(char *)where,howmuch-got,0);
-        if(rx<0)
+        if(rx<=0)
         {
           perror("RxData");
-          return 0;
+          close();
+          return false;
         }
         where+=rx;
         got+=rx;
     }
-  return 1;
+  return true;
 }
 /**
     \fn txData




More information about the Avidemux-svn-commit mailing list