コード例 #1
0
        /// <summary>
        /// Dpsc收到資料事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="dataType"></param>
        /// <param name="data"></param>
        private void fDpsc_OnRcvData(Dpsc sender, ushort dataType, byte[] data)
        {
            if (dataType == fChannel)
            {
                fForwardingCount++;

                //直接把收到封包轉發出去
                fBroadcasting(data, dataType);
            }
        }
コード例 #2
0
        /// <summary>
        /// 發送模組
        /// </summary>
        /// <param name="dpscKey"></param>
        /// <param name="dpscIp"></param>
        /// <param name="dpscPort"></param>
        /// <param name="chkSum"></param>
        /// <param name="outputMessage"></param>
        /// <param name="broadcasting"></param>
        /// <param name="channel"></param>
        public ForwardModule(string dpscKey, string dpscIp, ushort dpscPort, uint chkSum,
                             Action <string> outputMessage,
                             Action <byte[], ushort> broadcasting, uint channel)
        {
            fOutputMessage = outputMessage;
            fBroadcasting  = broadcasting;
            fChannel       = channel;

            fDpsc             = new Dpsc(dpscKey);
            fDpsc.ServerHost  = dpscIp;
            fDpsc.ServerPort  = dpscPort;
            fDpsc.SysCheckSum = chkSum;
            fDpsc.OnStatus   += fDpsc_OnStatus;
            fDpsc.OnRcvData  += fDpsc_OnRcvData;
            fDpsc.Connect();
        }
コード例 #3
0
        public MainForm()
        {
            InitializeComponent();

            fSetting = new Settings();

            MarketType marketType = (MarketType)fSetting.ApMartketType;

            this.Text = string.Format("{0} {1} Ver:{2} x{3}", marketType, Application.ProductName, Application.ProductVersion, IntPtr.Size * 8);

            //服務原始IDKey
            string originKey = string.Format("{0}:{1}", Dpsc.GetServiceOriginalKey(fSetting.DpscPort, Assembly.GetExecutingAssembly()), marketType);

            TextBox_DpscKeyId.Text = originKey;

            // dataGridView 錯誤處理 (不然會跳exception)
            DataGridView_Clients.DataError += DataGridView_Clients_DataError;

            fProxyServer = new ProxyServer(fSetting.MulticastPort, fSetting.IsKeepNewConnectionWhenOverLimit, fSetting.ClientHeartBeatFrequency, fSetting.ClientSameIPLimitCount, OutMessages);
            fProxyServer.OnStatus.OnFireEvent += fProxyServer_OnStatusMessage;

            // 心跳封包樣本
            fHeartbeat = new Heartbeat(new TimeSpan(0, 0, fSetting.HeartBeatFrequency), fProxyServer.Broadcasting);

            fProxyServer.SetHeartBeatPackage(fHeartbeat.HeartbeatBytes, Heartbeat.HEART_BEAT_DATA_TYPE);

            //發送模組
            fForwardModule = new ForwardModule(originKey,
                                               fSetting.DpscIp, fSetting.DpscPort, fSetting.DpscChk,
                                               OutMessages,
                                               fHeartbeat.BlockingHeartbeat,
                                               fSetting.RawDataChannel
                                               );

            // datagrid綁資料結構
            fBindingSource                  = new BindingSource();
            fBindingSource.DataSource       = fProxyServer.GetAvailableClinets();
            DataGridView_Clients.DataSource = fBindingSource;
        }
コード例 #4
0
        /// <summary>
        /// Dpsc連線事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="status"></param>
        /// <param name="message"></param>
        private void fDpsc_OnStatus(Dpsc sender, Dpsc.DpscStatusList status, string message)
        {
            switch (status)
            {
            case Dpsc.DpscStatusList.DebugError:
                break;

            case Dpsc.DpscStatusList.Connecting:
            {
                fOutputMessage("Dpsc連線中");
            }
            break;

            case Dpsc.DpscStatusList.Connected:
            {
                fOutputMessage("Dpsc連線成功");

                //訂閱即時條件頻道
                fDpsc.SubChannel(fChannel);
            }
            break;

            case Dpsc.DpscStatusList.KeepAlive:
                break;

            case Dpsc.DpscStatusList.SubChannel:
            {
                fOutputMessage(string.Format("訂閱{0}", message));
            }
            break;

            case Dpsc.DpscStatusList.DisSubChannel:
                break;

            case Dpsc.DpscStatusList.ServerTime:
                break;

            case Dpsc.DpscStatusList.DisConnect:
            {
                fOutputMessage("Dpsc斷線了");
                fDpsc.Connect();
            }
            break;

            case Dpsc.DpscStatusList.ConnectTimeout:
            {
                fOutputMessage("Dpsc連線逾時");
                fDpsc.Connect();
            }
            break;

            case Dpsc.DpscStatusList.UserDisConnect:
            {
                fOutputMessage("使用者將Dpsc斷開");
            }
            break;

            default:
                break;
            }
        }