CC Web Socket

CC Web Socket provides a robust and flexible WebSocket client for Flutter applications. This package allows you to easily manage and customize WebSocket connections.

For more detailed information: https://ferhaterdem.medium.com/building-real-time-flutter-apps-with-cc-web-socket-c8429fa5c83c

Features

  • Easy Initialization: Quickly establish WebSocket connections with simple configuration options.
  • Timeout and Ping Settings: Customize connection timeout and ping intervals.
  • Automatic Reconnection: Automatically reconnect when the connection is lost.
  • Detailed Logging: Options for logging connection status, requests, and responses.
  • Modular Structure: Extend functionality with plugins and modules.

Installation

Add this package to your project by including the following line in your pubspec.yaml file:

dependencies:
  cc_web_socket: ^1.0.0

Usage

Initialization

To initialize CCWebSocket, use the following code:

CCWebSocket.init(
  socketOptions: CCSocketOptions(
    uri: Uri(
      scheme: "wss",
      host: "echo.websocket.org",
      port: 443,
      path: ".ws",
    ),
    connectTimeout: const Duration(seconds: 5),
    pingInterval: const Duration(seconds: 120),
    requestTypeName: "request_type",
    autoConnect: true,
  ),
  loggingOptions: CCSocketLogging(
    logEnabled: true,
    onConnection: (prompt) {},
    onReconnection: (prompt) {},
    onClosed: (prompt) {},
    onRequest: (prompt) {},
    onResponse: (prompt) {},
    onError: (prompt) {},
  ),
  modules: [
    Example(),
  ],
);

NOTE The requestTypeName parameter is an identifier in the JSON content that matches the correct module for the returned data.

Connection

To initiate the WebSocket connection, use the following code:

CCWebSocket.connect();

Module Usage

To send a request through a module:

CCWebSocket.getModule<Example>().request(
  body: {
    "request_type": "Unknown",
  },
);

Example Module

You can create your own module by defining a class like this:

class Example extends RequestModule {
  @override
  void request({required Map<String, dynamic> body}) {
    super.request(body: body);
  }

  @override
  void response(dynamic response) {}
}

or to handle only the response:

class Example extends RequestModule {
  @override
  void response(dynamic response) {}
}

Contributing

If you want to contribute, please submit a pull request or open an issue. We value all kinds of feedback.

License

This project is licensed under the MIT License. For more information, see the LICENSE file.