/* syncIntervalSec: * -ve ==> don't sync on writes; only sync on close. * 0 ==> sync on every write * +ve ==> sync every x seconds * * Throws System.Exception e.g., on network disconnection for remote streams. Catch in Caller. */ public IStream openValueDataStream <KeyType, ValType>(FqStreamID FQSID, CallerInfo Ci, LocationInfo Li, StreamSecurityType type, CompressionType ctype, StreamOp op, string mdserveraddress = null, int ChunkSizeForUpload = 4 *1024 *1024, int ThreadPoolSize = 1, Logger log = null, bool sideload = false, int syncIntervalSec = -1) where KeyType : IKey, new() where ValType : IValue, new() { if (Li == null) { Li = new LocationInfo("", "", SynchronizerType.None); } return(new MetaStream <KeyType, ValType>(FQSID, Ci, Li, op, type, ctype, StreamDataType.Values, syncIntervalSec, mdserveraddress, ChunkSizeForUpload, ThreadPoolSize, log, sideload)); }
/// <summary> /// Requires that the next operation is expected /// </summary> /// <param name="op">The expected operation</param> private void _require(StreamOp op) { if (Next != op) { throw new InvalidOperationException(); } }
BinaryReader sendMsg(StreamOp op, Action <BinaryWriter> mkbody = null) { byte[] body; using (var ms = new MemoryStream()) using (var write = new BinaryWriter(ms)) { write.Write(id); write.Write((byte)op); mkbody?.Invoke(write); body = ms.ToArray(); } ServerResponseType resp = ServerResponseType.REQ_SUCCESS; BinaryReader ret = null; Task.WaitAll(man.SendMessage(ServerMessageType.STREAM_OP, body, (aresp, aret) => { resp = aresp; ret = aret == null ? null : new BinaryReader(new MemoryStream(aret.ReadBytes((int)aret.BaseStream.Length))); })); switch (resp) // TODO: Improve error handling { case ServerResponseType.REQ_SUCCESS: break; case ServerResponseType.REQ_ERROR: throw new Exception(ret.ReadString()); default: throw new Exception(); } return(ret); }
/// <summary> /// Requires that the next operation is expected /// </summary> /// <param name="op">The expected operation</param> private void _require(StreamOp op) { if (Next != op) throw new InvalidOperationException(); }
void sendCmd(StreamOp op, Action <BinaryWriter> mkbody = null) { sendMsg(op, mkbody)?.Dispose(); }
long getlong(StreamOp op) { using (var read = sendMsg(op)) return(read.ReadInt64()); }
bool getbool(StreamOp op) { using (var read = sendMsg(op)) return(read.ReadBoolean()); }