Esempio n. 1
0
 /// <summary>
 /// データ送信時に呼ばれます。(継承用)
 /// </summary>
 protected virtual void OnSent(DataEventArgs e)
 {
 }
Esempio n. 2
0
        /// <summary>
        /// データの送信終了後に呼び出されます。
        /// </summary>
        private void RaiseSent(SendData sendData, Exception error)
        {
            // TODO:
            var e = new DataEventArgs(
                null, /*(sendData != null ? sendData.Buffer : null)*/
                error);

            // 継承メソッドを呼びます。
            Util.SafeCall(() => OnSent(e));

            // eventを呼びます。
            this.Sent.SafeRaiseEvent(this, e);
        }
Esempio n. 3
0
        /// <summary>
        /// データ受信時に呼ばれます。
        /// </summary>
        protected void RaiseReceived(byte[] data, int length, Exception error)
        {
            var e = new DataEventArgs(data, length, error);

            // 継承メソッドを呼びます。
            Util.SafeCall(() =>
                OnReceived(e));

            // eventを呼びます。
            var handler = Received;
            if (handler != null)
            {
                Util.SafeCall(() =>
                    handler(this, e));
            }
        }
Esempio n. 4
0
 /// <summary>
 /// データ受信時に呼ばれます。(継承用)
 /// </summary>
 protected virtual void OnReceived(DataEventArgs e)
 {
 }
Esempio n. 5
0
        /// <summary>
        /// データ受信時にコールバックされます。
        /// </summary>
        private void connection_Received(object sender, DataEventArgs e)
        {
            if (e.Error != null)
            {
                Log.ErrorException(e.Error,
                    "評価値サーバーからデータの受信に失敗しました。");
                return;
            }

            try
            {
                this.reader.Write(e.Data, 0, e.DataLength);

                // コマンド行は'\0'で区切られています。
                var data = this.reader.ReadUntil((byte)'\0');
                if (data == null)
                {
                    return;
                }

                var str = Encoding.UTF8.GetString(data);
                if (string.IsNullOrEmpty(str))
                {
                    return;
                }

                // 各コマンドをパースします。
                var list = ParseCommand(str);
                if (!list.Any())
                {
                    return;
                }

                HandleCommand(list[0], list.Take(1).ToList());
            }
            catch (Exception ex)
            {
                Util.ThrowIfFatal(ex);

                Log.ErrorException(ex,
                    "評価値データの取得に失敗しました。");
            }
        }