Example #1
0
        public void WriteValue(SerializationCtx context, UnsafeWriter writer)
        {
            Assertion.Assert(!myHandler.IsSendWithoutContexts, "!myHandler.IsWritingOwnMessages");
            var value = Context.Value;

            if (value == null)
            {
                InternId.Write(writer, InternId.Invalid);
                writer.Write(false);
            }
            else
            {
                using (myHandler.CreateSendWithoutContextsCookie())
                {
                    if (!myProtocolValueSet.Contains(value))
                    {
                        Assertion.Require(Proto.Scheduler.IsActive, "Attempting to use previously unused context value {0} on a background thread for key {1}", value, Context.Key);
                        myProtocolValueSet.Add(Context.Value);
                    }

                    var internedId = myInternRoot.Intern(value);
                    InternId.Write(writer, internedId);
                    if (!internedId.IsValid)
                    {
                        writer.Write(true);
                        Context.WriteDelegate(context, writer, value);
                    }
                }
            }
        }
Example #2
0
        private void AddValueToProtocolValueSetImpl(T value)
        {
            if (myProtocolValueSet.Contains(value))
            {
                return;
            }

            Assertion.Require(Proto.Scheduler.IsActive, "Attempting to use previously unused context value {0} on a background thread for key {1}", value, Context.Key);
            myProtocolValueSet.Add(Context.Value);
        }