48 lines
1.4 KiB
Markdown
48 lines
1.4 KiB
Markdown
# Recipes
|
|
|
|
These are some suggestions and ideas for when building your own protocols using the
|
|
various protocol classes.
|
|
|
|
## Marshalling objects
|
|
|
|
You can use the beforePackCb and afterUnpackCb to serialize and unserialize parameters
|
|
as desired. Consider the security implications of this before you do anything stupid
|
|
though, as a spoofed frame could have unexpected consequences when unserialized.
|
|
|
|
```php
|
|
$proto = new JsonProtocol(
|
|
beforePackCb: function (array $frame): array {
|
|
$frame['obj'] = serialize($frame['obj']);
|
|
return $frame;
|
|
},
|
|
afterUnpackCb: function (array $frame): array {
|
|
$frame['obj'] = unserialize($frame['obj]);
|
|
return $frame;
|
|
},
|
|
);
|
|
```
|
|
|
|
## Building line-based messages
|
|
|
|
By using the `beforePackCb` callback, you can take messages in a structured format
|
|
and return them as a list for line-based protocols. You can do the same in reverse
|
|
with the `afterUnpackCb` callback.
|
|
|
|
```php
|
|
$proto = new LineProtocol(
|
|
beforePackCb: function (array $frame): array {
|
|
switch ($frame['cmd']) {
|
|
case 'search':
|
|
return [ "search", $frame['query'] ];
|
|
// ..
|
|
}
|
|
},
|
|
afterUnpackCb: function (array $frame): array {
|
|
switch ($frame[0]) {
|
|
case 'search':
|
|
return [ 'cmd' => $frame[0], 'query' => $frame[1] ];
|
|
// ..
|
|
}
|
|
}
|
|
)
|
|
``` |