mirror of
https://github.com/fumiama/simple-dict.git
synced 2026-06-27 15:30:23 +08:00
155 lines
4.4 KiB
Markdown
155 lines
4.4 KiB
Markdown
# simple-dict-server
|
|
database["key"]="value"
|
|
|
|
# Compile
|
|
You should first clone this project into a system with cmake & libpthread installed.
|
|
If you plan to compile it on Windows, you should edit the source code and transform socket/thread/file libraries into Windows version.
|
|
```bash
|
|
git clone https://github.com/fumiama/simple-dict-server.git
|
|
```
|
|
Create a `build` folder.
|
|
```bash
|
|
cd simple-dict-server
|
|
mkdir build
|
|
```
|
|
Use `cmake` command to generate files for `make` automatically.
|
|
```bash
|
|
cd build
|
|
cmake ../
|
|
```
|
|
Use `make` to generate executable binary files named `simple-dict-server` and `simple-dict-client` in `./build` directory.
|
|
```bash
|
|
make
|
|
```
|
|
|
|
# Execute
|
|
Start server on localhost using the commands below.
|
|
```bash
|
|
chmod +x simple-dict-server simple-dict-client
|
|
./simple-dict-server -d 7777 1 ./dict.sp ./cfg.sp # use -d to start as daemon
|
|
```
|
|
`cfg.sp`is generated by `cfgwriter`.
|
|
|
|
Open another shell to connect to it.
|
|
```bash
|
|
./simple-dict-client 127.0.0.1 7777
|
|
```
|
|
Now you have connected to the server. The default access passwords is in `client.c` and you can modify the password in source code as you like. Please note that the server will only wait `10` seconds for a response after the last communication. The box below shows how to control the server to accompilsh basic add/del/find/edit operations.
|
|
|
|
| cmd | data | description |
|
|
| ---- | ---- | ---- |
|
|
| get: | key | get key value |
|
|
| cat: | filename | save raw dict.sp into filename |
|
|
| md5: | md5 str | compare whether md5 of dict.sp is what given in data |
|
|
| end | no data | end conversation |
|
|
| set: | key | set key |
|
|
| dat: | value to set | give value to the key |
|
|
| del: | key | del key |
|
|
|
|
The raw data starts with an integer showing its size, then a char `$` follows, finally following all binary data in `./dict.sp` encoded by `TEA`.
|
|
|
|
A cmd sequence example is as below
|
|
```bash
|
|
get:test
|
|
set:test
|
|
dat:测试
|
|
get:test
|
|
del:test
|
|
get:test
|
|
end
|
|
```
|
|
The client output is
|
|
```bash
|
|
break!
|
|
Get sockfd
|
|
Connected to server
|
|
Thread create succeeded
|
|
Enter command:get:test
|
|
Send data succeed.
|
|
recv ack: null
|
|
Enter command:set:test
|
|
Send data succeed.
|
|
recv ack: data
|
|
Enter command:dat:测试
|
|
Send data succeed.
|
|
recv ack: succ
|
|
Enter command:get:test
|
|
Send data succeed.
|
|
recv ack: 测试
|
|
Enter command:del:test
|
|
Send data succeed.
|
|
recv ack: succ
|
|
Enter command:get:test
|
|
Send data succeed.
|
|
recv ack: null
|
|
Enter command:end
|
|
Send data succeed.
|
|
```
|
|
The server output meanwhile is
|
|
```bash
|
|
Bind server success!
|
|
Listening....
|
|
Ready for accept, waitting...
|
|
Next thread is No.0
|
|
Accept client ::ffff:127.0.0.1:51296
|
|
Creating thread succeeded
|
|
Ready for accept, waitting...
|
|
|
|
Connected to the client.
|
|
Next thread is No.1
|
|
Creating timer thread succeeded
|
|
Wait sec: 2, max: 10
|
|
[normal] Get 34 bytes packet with cmd: 0, data: test
|
|
Close dict
|
|
Send data: null
|
|
Wait sec: 0, max: 10
|
|
Wait sec: 2, max: 10
|
|
Wait sec: 4, max: 10
|
|
[super] Get 34 bytes packet with data: test
|
|
Send data: data
|
|
Wait sec: 1, max: 10
|
|
Wait sec: 3, max: 10
|
|
[super] Get 34 bytes packet with data: 测试
|
|
Data copy to dict succ
|
|
Set data: dict[test]=测试
|
|
Close dict
|
|
Send data: succ
|
|
Wait sec: 0, max: 10
|
|
Wait sec: 2, max: 10
|
|
[normal] Get 34 bytes packet with cmd: 0, data: test
|
|
Close dict
|
|
Send data: 测试
|
|
Wait sec: 0, max: 10
|
|
Wait sec: 2, max: 10
|
|
[super] Get 34 bytes packet with data: test
|
|
Close dict
|
|
Send data: succ
|
|
Wait sec: 0, max: 10
|
|
Wait sec: 2, max: 10
|
|
[normal] Get 34 bytes packet with cmd: 0, data: test
|
|
Close dict
|
|
Send data: null
|
|
Wait sec: 0, max: 10
|
|
[normal] Get 34 bytes packet with cmd: 4, data: fill
|
|
Conversation end
|
|
|
|
Start killing.
|
|
Close accept.
|
|
Free data.
|
|
Close dict
|
|
Finish killing.
|
|
Wait sec: 0, max: 10
|
|
Call kill thread
|
|
Start killing.
|
|
Close dict
|
|
Finish killing.
|
|
Free timer
|
|
Finish calling kill thread
|
|
```
|
|
|
|
# Android Client for simple-dict-server
|
|
There is also an [Android Client](https://github.com/fumiama/simple-dict-android) for simple-dict-server. Just install the apk file downloaded from release page and click `config` icon to set your server address using the format
|
|
```
|
|
127.0.0.1:7777_password
|
|
```
|
|
Note that this APP is designed for a new language called `Tenenja`, so the font inside is abnormal. What's more, there is no English translation for this APP because its users are Chinese. If you want to get an APP in your language, just edit the source code for free. |