/// <summary> /// Request and reply process /// </summary> /// <returns>Data of reply</returns> public object Process() { RobotReplyData replyData = null; if (!SetupConnection()) { OnProcessError(ErrorCode.SetupConnection, "Setup connection error"); _logger.Error("Cannot connect to robot"); return(null); } byte[] packet = BuildRequest(); RobotReply reply = null; int crcCount = 0; bool crcError = false; do { crcCount++; //if (GlobalVariables.Sw != null && GlobalVariables.Sw.IsRunning) //{ // GlobalVariables.Sw.Stop(); // _logger.Info("1 processing session duration: " + GlobalVariables.Sw.ElapsedMilliseconds); //} try { Conn.SendPacket(packet); } catch (SocketException se) { OnProcessError(ErrorCode.SocketException, se.Message); _logger.Error("SendPacket socket exception: " + se.Message); return(replyData); } // For testing transfer speed //OnProcessSuccessfully(null); //return replyData; try { reply = Conn.ReceiveReply(); } catch (SocketException se) { OnProcessError(ErrorCode.SocketException, se.Message); _logger.Error("ReceiveReply socket exception: " + se.Message); return(replyData); } //if (GlobalVariables.Sw == null || !GlobalVariables.Sw.IsRunning) GlobalVariables.Sw = Stopwatch.StartNew(); if (reply != null) { reply.RequestID = RequestID; replyData = reply.Process(); switch (replyData.Type) { case RobotReplyData.ReplyType.Success: OnProcessSuccessfully(replyData); _logger.Info("Receive reply from robot: type successfully"); break; case RobotReplyData.ReplyType.Failed: OnProcessError(ErrorCode.ReplyFailed, "Reply error"); _logger.Error("Receive reply from robot: type failed"); break; case RobotReplyData.ReplyType.WrongID: OnProcessError(ErrorCode.WrongSessionID, "Wrong session ID"); _logger.Error("Receive reply from robot: type wrong session ID"); break; case RobotReplyData.ReplyType.CRC: crcError = true; _logger.Error("Receive reply from robot: type CRC error"); break; } } else { OnProcessError(ErrorCode.ReplyNull, "Reply cannot be null"); _logger.Error("Receive reply from robot: reply null"); } } while (crcCount < WirelessConnection.MaxCrcRetry && crcError); //ReleaseConnection(); return(replyData); }