internal ODocument ExecuteOperation(IOperation operation) { Request request = operation.Request(SessionId); byte[] buffer; foreach (RequestDataItem item in request.DataItems) { switch (item.Type) { case "byte": case "short": case "int": case "long": Send(item.Data); break; case "record": buffer = new byte[2 + item.Data.Length]; Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 2); Buffer.BlockCopy(item.Data, 0, buffer, 2, item.Data.Length); Send(buffer); break; case "bytes": case "string": case "strings": //buffer = new byte[4 + item.Data.Length]; //Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 4); //Buffer.BlockCopy(item.Data, 0, buffer, 4, item.Data.Length); //Send(buffer); Send(BinarySerializer.ToArray(item.Data.Length)); Send(item.Data); break; default: break; } } _networkStream.Flush(); if (request.OperationMode == OperationMode.Synchronous) { try { Response response = new Response(this); response.Receive(); return(((IOperation)operation).Response(response)); } catch (Exception exception) { //reset connection as the socket may contains unread data and is considered unstable Reconnect(); throw; } } else { return(null); } }
private ODocument ExecuteOperationInternal(IOperation operation) { try { if (_networkStream == null) { Reconnect(); } var req = new Request(this); req.SetSessionId(SessionId); Request request = operation.Request(req); byte[] buffer; foreach (RequestDataItem item in request.DataItems) { switch (item.Type) { case "byte": case "short": case "int": case "long": Send(item.Data); break; case "record": buffer = new byte[2 + item.Data.Length]; Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 2); Buffer.BlockCopy(item.Data, 0, buffer, 2, item.Data.Length); Send(buffer); break; case "bytes": case "string": case "strings": Send(BinarySerializer.ToArray(item.Data.Length)); Send(item.Data); break; default: break; } } _networkStream.Flush(); if (request.OperationMode != OperationMode.Synchronous) { return(null); } Response response = new Response(this); response.Receive(); return(((IOperation)operation).Response(response)); } catch (IOException) { Destroy(); throw; } }
private ODocument ExecuteOperationInternal(IOperation operation) { try { if (_networkStream == null) Reconnect(); var req = new Request(this); req.SetSessionId(SessionId); Request request = operation.Request(req); byte[] buffer; foreach (RequestDataItem item in request.DataItems) { switch (item.Type) { case "byte": case "short": case "int": case "long": Send(item.Data); break; case "record": buffer = new byte[2 + item.Data.Length]; Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 2); Buffer.BlockCopy(item.Data, 0, buffer, 2, item.Data.Length); Send(buffer); break; case "bytes": case "string": case "strings": Send(BinarySerializer.ToArray(item.Data.Length)); Send(item.Data); break; default: break; } } _networkStream.Flush(); if (request.OperationMode != OperationMode.Synchronous) return null; Response response = new Response(this); response.Receive(); return ((IOperation)operation).Response(response); } catch (IOException) { Destroy(); throw; } }
internal ODocument ExecuteOperation(IOperation operation) { Request request = operation.Request(SessionId); byte[] buffer; foreach (RequestDataItem item in request.DataItems) { switch (item.Type) { case "byte": case "short": case "int": case "long": Send(item.Data); break; case "record": buffer = new byte[2 + item.Data.Length]; Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 2); Buffer.BlockCopy(item.Data, 0, buffer, 2, item.Data.Length); Send(buffer); break; case "bytes": case "string": case "strings": //buffer = new byte[4 + item.Data.Length]; //Buffer.BlockCopy(BinarySerializer.ToArray(item.Data.Length), 0, buffer, 0, 4); //Buffer.BlockCopy(item.Data, 0, buffer, 4, item.Data.Length); //Send(buffer); Send(BinarySerializer.ToArray(item.Data.Length)); Send(item.Data); break; default: break; } } _networkStream.Flush(); if (request.OperationMode == OperationMode.Synchronous) { try { Response response = new Response(this); response.Receive(); return ((IOperation)operation).Response(response); } catch (Exception ) { //reset connection as the socket may contains unread data and is considered unstable Reconnect(); throw; } } else { return null; } }