public Request(INanoConnection c, byte interfaceId, byte commandId) { _connection = c; MemoryStream = new MemoryStream(); BinaryWriter = new BinaryWriter(MemoryStream); BinaryWriter.Write(interfaceId); BinaryWriter.Write(commandId); }
public static void SetMessage(INanoConnection c, int message) { using (var request = new NanoNetworkCommand.Request(c, Interface.InterfaceId, (byte)CommandIds.SetNumber)) { request.BinaryWriter.Write(message); } using (new NanoNetworkCommand.Response(c)) { } }
public static int GetNumber(INanoConnection c) { using (new NanoNetworkCommand.Request(c, Interface.InterfaceId, (byte)CommandIds.GetNumber)) { } using (var response = new NanoNetworkCommand.Response(c)) { return(response.BinaryReader.ReadInt32()); } }
public Response(INanoConnection c) { byte[] buf; NN.SetSockOpt(c.Socket, SocketOption.RCVTIMEO, (int)c.ConnectionTimeout.TotalMilliseconds); if (NN.Recv(c.Socket, out buf, SendRecvFlags.NONE) < 0) { throw new NanoNetworkCommandException("Error receiving response"); } MemoryStream = new MemoryStream(buf); BinaryReader = new BinaryReader(MemoryStream); }
public static double AddNumbers(INanoConnection c, double a, double b) { using (var request = new NanoNetworkCommand.Request(c, Interface.InterfaceId, (byte)CommandIds.AddNumbers)) { request.BinaryWriter.Write(a); request.BinaryWriter.Write(b); } using (var response = new NanoNetworkCommand.Response(c)) { return(response.BinaryReader.ReadDouble()); } }
public static T RetryUntilNoTimeout <T>(Del <T> del, INanoConnection connection, CloseOpenDelegate closeOpen) { while (true) { try { return(del()); } catch (Exception e) { if (!(e is NanoNetworkCommandException)) { throw e; } // nanomsg should really never get stuck. Arbitrarily wait a bit. closeOpen(connection); } } }