/// <summary>
        /// 单纯的获取数字形式的流水号
        /// </summary>
        /// <returns>新增计数后的信息</returns>
        public long GetLongOrder( )
        {
            long number = Interlocked.Increment(ref CurrentIndex);

            AsyncCoordinator.StartOperaterInfomation( );
            return(number);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 获取流水号数据
        /// </summary>
        /// <returns></returns>
        public string GetNumericalOrder()
        {
            long number = Interlocked.Increment(ref CurrentIndex);

            AsyncCoordinator.StartOperaterInfomation();
            return(TextHead + DateTime.Now.ToString(TimeFormate) + number.ToString().PadLeft(NumberLength, '0'));
        }
Ejemplo n.º 3
0
        public void request_is_faulted_when_writer_throws_exception()
        {
            var requestCompletion        = new RequestCompletion();
            AggregateException exception = null;
            var waitHandle = new ManualResetEvent(false);

            requestCompletion.WhenCompleteDo(ex =>
            {
                exception = ex as AggregateException;
                waitHandle.Set();
            });
            var asyncCoordinator = new AsyncCoordinator(requestCompletion, Enumerable.Empty <IExceptionHandler>());

            theWriter.WriterThrows = true;

            var task = theChannelWriter.Write(theTopic);

            theChannel.Write(q => q.Write(e1));

            asyncCoordinator.Push(task);

            waitHandle.WaitOne(TimeSpan.FromSeconds(1));
            var exceptions = exception.Flatten().InnerExceptions;

            exceptions.Count.ShouldBe(1);
            exceptions[0].Message.ShouldBe(RecordingServerEventWriter.ExceptionMessage);
        }
Ejemplo n.º 4
0
 private void LoadByFileAndInitAsyncCoordinator()
 {
     LoadByFile(m => m);
     _AsyncCoordinator = new AsyncCoordinator(() =>
     {
         if (!string.IsNullOrEmpty(FileSavePath))
         {
             using (StreamWriter sw = new StreamWriter(FileSavePath, false, Encoding.UTF8))
             {
                 sw.Write(CurrentIndex);
             }
         }
     });
 }
Ejemplo n.º 5
0
        private void TcpStateUpLine(AppSession state)
        {
            HybirdLockSockets.Enter( );
            All_sockets_connect.Add(state);
            HybirdLockSockets.Leave( );

            // 提示上线
            ClientOnline?.Invoke(state);
            // 是否保存上线信息
            if (IsSaveLogClientLineChange)
            {
                LogNet?.WriteInfo(ToString(), "IP:" + state.IpAddress + " Name:" + state?.LoginAlias + " " + StringResources.NetClientOnline);
            }
            // 计算客户端在线情况
            AsyncCoordinator.StartOperaterInfomation( );
        }
Ejemplo n.º 6
0
        private void TcpStateDownLine(AppSession state, bool is_regular)
        {
            HybirdLockSockets.Enter( );
            All_sockets_connect.Remove(state);
            HybirdLockSockets.Leave( );
            // 关闭连接
            TcpStateClose(state);
            // 判断是否正常下线
            string str = is_regular ? StringResources.NetClientOffline : StringResources.NetClientBreak;

            ClientOffline?.Invoke(state, str);
            // 是否保存上线信息
            if (IsSaveLogClientLineChange)
            {
                LogNet?.WriteInfo(ToString(), "IP:" + state.IpAddress + " Name:" + state?.LoginAlias + " " + str);
            }
            // 计算客户端在线情况
            AsyncCoordinator.StartOperaterInfomation( );
        }
Ejemplo n.º 7
0
        private void TimerCallBack()
        {
            // 如果已经连接就返回,此处采用原子操作实现
            if (Interlocked.CompareExchange(ref ConnectStatus, 1, 0) == 0)
            {
                m_ac = new AsyncCoordinator();
                for (int i = 0; i < PlcStates.Length; i++)
                {
                    PlcStates[i].IsConnect  = false;
                    PlcStates[i].WorkSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    PlcStates[i].WorkSocket.BeginConnect(new IPEndPoint(PlcStates[i].PlcIpAddress, PlcStates[i].GetPort()), new AsyncCallback(PlcConnectCallBack), PlcStates[i]);
                    PlcStates[i].LengthDataHead    = 0;
                    PlcStates[i].LengthDataContent = 0;

                    m_ac.AboutToBegin(1);
                }
                // 启动检查连接情况
                m_ac.AllBegun(AllDown);
            }
        }
 /// <summary>
 /// 清除流水号计数,进行重新计数
 /// </summary>
 public void ClearNumericalOrder( )
 {
     Interlocked.Exchange(ref CurrentIndex, 0);
     AsyncCoordinator.StartOperaterInfomation( );
 }