Пример #1
0
        public virtual Flow CreateFlow(ulong id, string signature, ulong assocFlowId)
        {
            if (IsEnqueueForDelete)
            {
            }
            if (Flows.ContainsKey(id))
            {
                return(Flows[id]);
            }

            Flow       flow      = null;
            FlowWriter localFlow = null;

            if (FlowWriters.ContainsKey(assocFlowId))
            {
                localFlow = FlowWriters[assocFlowId];
            }
            switch (signature)
            {
            case FlowConnection.Signature:
                Logger.Debug("New FlowConnection {0} on session {1}", id, Id);
                flow = new FlowConnection(id, Peer, Handler, this, localFlow);
                break;

            case FlowGroup.Signature:
                Logger.Debug("New FlowGroup {0} on session {1}", id, Id);
                flow = new FlowGroup(id, Peer, Handler, this, localFlow);
                break;

            default:
                if (signature.StartsWith(FlowStream.Signature))
                {
                    Logger.Debug("New FlowStream {0} on session {1}", id, Id);
                    flow = new FlowStream(id, signature, Peer, Handler, this, localFlow);
                }
                else
                {
                    Logger.FATAL("New unknown flow {0} on session {1}", signature, Id);
                }
                break;
            }
            if (flow != null && id != 0)
            {
                Flows[id] = flow;
            }
            return(flow);
        }