Esempio n. 1
0
 /* 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));
 }
Esempio n. 2
0
 /// <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);
            }
Esempio n. 4
0
 /// <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());
 }