1.0.0 • Published 2 years ago

@antivivi/fletchette v1.0.0

Weekly downloads
-
License
ISC
Repository
github
Last release
2 years ago

Fletchette

A type-safe networking library for roblox-ts that simplifies client-server communication.

Features

  • Type Safety: Fully typed interfaces using TypeScript to prevent runtime errors
  • Binary Serialization: Efficient data transmission using binary serialization
  • Multiple Packet Types:
    • SignalPacket: For one-way communication (like RemoteEvents)
    • RequestPacket: For request-response patterns (like RemoteFunctions)
    • PropertyPacket: For synchronizing properties between server and client

Installation

npm install @rbxts/fletchette

Basic Usage

Importing

import { signal, request, property } from "@rbxts/fletchette";

SignalPacket

For one-way communication from server to client or client to server:

// Shared code
const playerJoined = signal<(player: Player, level: number) => void>();

// Server code
playerJoined.fireAll(newPlayer, 5); // Broadcast to all clients
playerJoined.fire(specificPlayer, 5); // Send to a specific client

// Client code
playerJoined.connect((player, level) => {
  print(`${player.Name} joined with level ${level}!`);
});

// Client to server
const requestItem = signal<(itemId: string) => void>();

// Client code
requestItem.inform("sword123");

// Server code
requestItem.listen((player, itemId) => {
  print(`${player.Name} requested item: ${itemId}`);
});

RequestPacket

For two-way communication (requests that expect a response):

// Shared code
const getPlayerData = request<(userId: number) => PlayerData>();

// Server code
getPlayerData.onInvoke((player, userId) => {
  // Authenticate and return data
  return fetchPlayerData(userId);
});

// Client code
const data = getPlayerData.invoke(123456789);
print(`Got player data: ${data.level}`);

// Server querying client
const getClientInfo = request<() => ClientInfo>();

// Client code
getClientInfo.onQuery(() => {
  return {
    resolution: workspace.CurrentCamera!.ViewportSize,
    performance: stats().Memory,
  };
});

// Server code
const clientInfo = getClientInfo.query(player);
print(`Client resolution: ${clientInfo.resolution.X}x${clientInfo.resolution.Y}`);

PropertyPacket

For synchronizing state between server and client:

// Shared code
const playerHealth = property<number>(100);

// Server code
// Update when player takes damage
playerHealth.set(player, 80);

// Client code
playerHealth.observe((newHealth) => {
  healthBar.Size = new UDim2(newHealth / 100, 0, 1, 0);
});

Advanced Features

Area-Based Communication

Send signals only to players within a certain radius:

// Server code
explosion.fireInRadius(bombPosition, 100, explosionStrength);

Selective Broadcasting

Send signals to specific groups of players:

// Server code
teamMessage.fireList(teamMembers, "Let's coordinate our attack!");
teamMessage.fireExcept(traitor, "There's a traitor among us!");

Documentation

For detailed API documentation, see the API documentation.

License

MIT

2.0.2

10 months ago

2.0.1

12 months ago

2.0.0

12 months ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago