json-socket

Version, currently master branch1 version
  • master branchlatestFeb 5, 2023

github.com/foi/crystal-json-socket

JSON-socket client & server implementation. Inspired by and compatible with sebastianseilund/node-json-socket

14 stars
0 dependents
License: MIT

Installation

# Add this to your shard.yml
dependencies:
  json-socket:
    github: foi/crystal-json-socket
    branch: master

master is a branch, not a release, so this tracks it rather than pinning a version.

Then run:

shards install

shard.yml

Crystal
no constraint declared
License
MIT
Author
foi <foi@live.ru>

Dependencies

This version declares no dependencies.

README

# crystal json-socket ![master branch](https://github.com/foi/crystal-json-socket/actions/workflows/ci.yml/badge.svg)


JSON-socket client & server implementation. Inspired by and compatible with  [sebastianseilund/node-json-socket](https://github.com/sebastianseilund/node-json-socket/) and
[ruby json-socket](https://github.com/foi/ruby-json-socket)

## Installation

Add this to your application's `shard.yml`:
```yaml
dependencies:
  json-socket:
    github: foi/crystal-json-socket
```

## Usage

server.cr

```crystal
require "json-socket"

struct CustomJSONSocketServer

  include JSONSocket::Server

  def on_message(message, socket)
    puts message
    result = (message["a"].as_i + message["b"].as_i) * message["b"].as_i * message["a"].as_i
    self.send_end_message({ :result => result}, socket)
  end

  # Additionally you can define a custom on_error handler
  def on_error(ex)
    puts "#{ex.message}"
  end

end

server = CustomJSONSocketServer.new("127.0.0.1", 1234) # OR CustomJSONSocketServer.new(unix_socket: "/tmp/json-socket-server.sock", delimeter: "µ")
server.listen
```

client.cr

```crystal
require "json-socket"
to_server = JSONSocket::Client.new(host: "127.0.0.1", port: 1234) # OR JSONSocket::Client.new(unix_socket: "/tmp/json-socket-server.sock", delimeter: "µ")
result = to_server.send({ a: 12, b: 8})
if (result)
  puts result
end
```

client.cr with timeouts in seconds

```crystal
require "json-socket"
to_server = JSONSocket::Client.new(host: "127.0.0.1", port: 1234, read_timeout: 10, write_timeout: 5) # OR JSONSocket::Client.new(unix_socket: "/tmp/json-socket-server.sock", delimeter: "µ", read_timeout: 10, write_timeout: 5)
result = to_server.send({ a: 12, b: 8})
if (result)
  puts result
end
```