Metadata-Version: 2.1
Name: dtppy
Version: 0.1.1
Summary: Cross-platform networking interfaces for Python.
Project-URL: Homepage, https://wkhallen.com/dtp
Project-URL: Repository, https://github.com/WKHAllen/dtppy
Author-email: Will Allen <wkhallen@gmail.com>
License-Expression: MIT
License-File: LICENSE
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: System :: Networking
Requires-Python: >=3.7
Requires-Dist: cryptography==37.0.4
Requires-Dist: rsa==4.9
Description-Content-Type: text/markdown

# Data Transfer Protocol for Python

Cross-platform networking interfaces for Python.

## Data Transfer Protocol

The Data Transfer Protocol (DTP) is a larger project to make ergonomic network programming available in any language.
See the full project [here](https://wkhallen.com/dtp/).

## Installation

Install the package:

```sh
$ python -m pip install dtppy
```

## Creating a server

A server can be built using the `Server` implementation:

```python
from dtppy import Server


# Called when data is received from a client
def receive(client_id, data):
    # Send back the length of the string
    s.send(len(data), client_id)


# Called when a client connects
def connect(client_id):
    print(f"Client with ID {client_id} connected")


# Called when a client disconnects
def disconnect(client_id):
    print(f"Client with ID {client_id} disconnected")


# Create a server that receives strings and returns the length of each string
s = Server(on_receive=receive, on_connect=connect, on_disconnect=disconnect)
s.start("127.0.0.1", 29275)
```

## Creating a client

A client can be built using the `Client` implementation:

```python
from dtppy import Client

message = "Hello, server!"


# Called when data is received from the server
def receive(data):
    # Validate the response
    print(f"Received response from server: {data}")
    assert data == len(message)


# Called when the client is disconnected from the server
def disconnected():
    print("Unexpectedly disconnected from server")


# Create a client that sends a message to the server and receives the length of the message
c = Client(on_receive=receive, on_disconnected=disconnected)
# Send the message to the server
c.send(message)
```

## Security

Information security comes included. Every message sent over a network interface is encrypted with AES-256. Key
exchanges are performed using a 512-bit RSA key-pair.
