Пример #1
0
 public void OnMessage(Gs2SessionTaskId gs2SessionTaskId, Gs2Response gs2Response)
 {
     using (var scopedLock = new NonreentrantLock.ScopedLock(_lock))
     {
         _gs2SessionTaskList.Find(v => v.Gs2SessionTaskId == gs2SessionTaskId)?.Complete(gs2Response);
     }
 }
Пример #2
0
 private void CompleteGs2SessionTasks(Gs2Response gs2Response)
 {
     foreach (var gs2SessionTask in _gs2SessionTaskList)
     {
         gs2SessionTask.Complete(gs2Response);
     }
 }
Пример #3
0
 public void Complete(Gs2Response gs2Response)
 {
     if (_gs2Response != null)
     {
         // タイムアウトやキャンセルと応答が入れ違いになったとしても、最初に決めた結果を採用する
     }
     else if (_isCancelled)
     {
         // キャンセルがかけられていれば、実際の応答が何であれ、キャンセルによる失敗として扱う
         _gs2Response = new Gs2Response(new SessionNotOpenException("Cancelled."));
     }
     else if (DateTime.Now >= _timeLimit)
     {
         // タイムアウトしていれば、実際の応答が何であれ、タイムアウトによる失敗として扱う
         _gs2Response = new Gs2Response(new RequestTimeoutException("The request timed out."));
     }
     else
     {
         _gs2Response = gs2Response;
     }
 }
Пример #4
0
 // Gs2Session の実行中タスクの登録からはずれたあとに、 Gs2Session のロックの外から呼ぶ
 public void InvokeCallback(Gs2Response gs2Response = null)
 {
     InvokeCallbackImpl(gs2Response ?? _gs2Response);
 }
Пример #5
0
 protected abstract void InvokeCallbackImpl(Gs2Response gs2Response);