public onMessage()

in src/Explorer/Graph/GraphExplorerComponent/GremlinSimpleClient.ts [146:243]


  public onMessage(msg: MessageEvent) {
    if (!msg) {
      if (this.params.failureCallback) {
        this.params.failureCallback(null, "onMessage called with no message");
      }
      return;
    }

    const rawMessage = this.decodeMessage(msg);
    if (!rawMessage) {
      return;
    }
    const requestId = rawMessage.requestId;
    const statusCode = rawMessage.status.code;
    const statusMessage = rawMessage.status.message;

    const result: Result = {
      requestId: requestId,
      data: rawMessage.result ? rawMessage.result.data : null,
      requestCharge: rawMessage.status.attributes[GremlinSimpleClient.requestChargeHeader],
    };

    if (!this.pendingRequests[requestId]) {
      if (this.params.failureCallback) {
        this.params.failureCallback(
          result,
          `Received response for missing or closed request: ${requestId} code:${statusCode} message:${statusMessage}`,
        );
      }
      return;
    }
    switch (statusCode) {
      case 200: // Success
        delete this.pendingRequests[requestId];
        if (this.params.successCallback) {
          this.params.successCallback(result);
        }
        break;
      case 204: // No content
        delete this.pendingRequests[requestId];
        if (this.params.successCallback) {
          result.data = null;
          this.params.successCallback(result);
        }
        break;
      case 206: // Partial content
        if (this.params.progressCallback) {
          this.params.progressCallback(result);
        }
        break;
      case 407: // Request authentication
        const challengeResponse = this.buildChallengeResponse(this.pendingRequests[requestId]);
        this.sendGremlinMessage(challengeResponse);
        break;
      case 401: // Unauthorized
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Unauthorized: ${statusMessage}`);
        }
        break;
      case 498: // Malformed request
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Malformed request: ${statusMessage}`);
        }
        break;
      case 500: // Server error
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Server error: ${statusMessage}`);
        }
        break;
      case 597: // Script eval error
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Script eval error: ${statusMessage}`);
        }
        break;
      case 598: // Server timeout
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Server timeout: ${statusMessage}`);
        }
        break;
      case 599: // Server serialization error
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Server serialization error: ${statusMessage}`);
        }
        break;
      default:
        delete this.pendingRequests[requestId];
        if (this.params.failureCallback) {
          this.params.failureCallback(result, `Error with status code: ${statusCode}. Message: ${statusMessage}`);
        }
        break;
    }
  }