---
# System prepended metadata

title: Homework 3 - Chess networking

---

# Homework 3 - Chess Networking

Nu kan ni alla spela schack, men det är ju väldigt tråkigt att spela schack själv. Veckans läxa är därför att implementera networking för erat schack så att ni kan spela emot varandra.

Ni ska först skapa ett gemensamt schack protokoll. Detta kommer ni ha gjort under övningen.


## Formalisera ett gemensamt  protokoll (delgrupp uppgift)
Delegera ansvar till en delgrupp att beskriva protokollet formellt över helgen. 

De ska ladda upp specificationen till ett offentligt repo i Inda23plusplus organisationen som heter `chess-network-protocol`.

Om ni lägger till mer fancy/mindre viktiga features (såsom undo och liknande) är det schyst att markera dessa som mindre vitala.

## Implementera protokollet

Fortsätt jobba med ert GUI och gör det möljligt att spela online enligt det gemensamma protokollet. 




## Resurser
* [Rust std::net::TcpStream](https://doc.rust-lang.org/stable/std/net/struct.TcpStream.html)

### Server
```rust
use std::io::prelude::*;
use std::net::TcpListener;

fn main() -> std::io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:5000")?;

    // accept connections and process them serially
    let (mut stream, _addr) = listener.accept()?;

    let mut buf = [0u8; 1];
    stream.read(&mut buf)?;

    println!("Recieved: {}", buf[0]);
    Ok(())
}
```

### Client
```rust
use std::io::prelude::*;
use std::net::TcpStream;

fn main() -> std::io::Result<()> {
    let mut stream = TcpStream::connect("127.0.0.1:5000")?;

    stream.write(&[1])?;
    Ok(())
}
```