summaryrefslogtreecommitdiff
path: root/http-client/main.go
diff options
context:
space:
mode:
authorAndrew <saintruler@gmail.com>2021-04-28 18:09:00 +0400
committerAndrew <saintruler@gmail.com>2021-04-28 18:09:00 +0400
commit7d6270f64b1dc00d91230b5c793bc49991f0fcf8 (patch)
treeee41d9e909968d56a83a09cf83fbb6e5ff6dbb1c /http-client/main.go
parent355dab5bdc924202b1d877b18ae31f04154a4aee (diff)
Added http client and tryAuth view to server.
Diffstat (limited to 'http-client/main.go')
-rw-r--r--http-client/main.go155
1 files changed, 155 insertions, 0 deletions
diff --git a/http-client/main.go b/http-client/main.go
new file mode 100644
index 0000000..14419e5
--- /dev/null
+++ b/http-client/main.go
@@ -0,0 +1,155 @@
+package main
+
+import (
+ "fyne.io/fyne/v2"
+ "fyne.io/fyne/v2/app"
+ "fyne.io/fyne/v2/canvas"
+ "fyne.io/fyne/v2/container"
+ "fyne.io/fyne/v2/data/binding"
+ "fyne.io/fyne/v2/dialog"
+ "fyne.io/fyne/v2/layout"
+ "fyne.io/fyne/v2/widget"
+ "image/color"
+)
+
+type UserData struct {
+ Username string
+}
+
+func chatLayout(window fyne.Window, user UserData, c chan string) {
+ window.SetTitle("Сообщения")
+ storage.binding = binding.BindStringList(&storage.data)
+ go runClient(user)
+
+ list := widget.NewListWithData(storage.binding,
+ func() fyne.CanvasObject {
+ return widget.NewLabel("template")
+ },
+ func(i binding.DataItem, o fyne.CanvasObject) {
+ o.(*widget.Label).Bind(i.(binding.String))
+ })
+
+ entry := widget.NewEntry()
+ submit := widget.NewButton("Отправить", func() {
+ go sendMessage(user, entry.Text)
+ entry.SetText("")
+
+ storage.RLock()
+ lastIdx := storage.binding.Length() - 1
+ list.Select(lastIdx)
+ list.Unselect(lastIdx)
+ storage.RUnlock()
+ })
+
+ window.SetContent(container.NewBorder(
+ nil,
+ container.NewBorder(nil, nil, nil, submit, entry),
+ nil, nil,
+ list,
+ ))
+}
+
+func loginLayout(window fyne.Window, c chan string) {
+ window.SetTitle("Войти в чат")
+
+ label := canvas.NewText("Chat", color.White)
+ label.TextSize = 40
+
+ loginLabel := widget.NewLabel("Логин: ")
+ loginEntry := widget.NewEntry()
+
+ chooseKey := widget.NewButton("Выбрать ключ для подписи", func() {
+ dialog.ShowFileOpen(func(closer fyne.URIReadCloser, err error) {
+ if closer == nil {
+ return
+ }
+ bufSize := 4096
+ data := make([]byte, 0)
+ buf := make([]byte, bufSize)
+ n := bufSize
+
+ for n >= bufSize {
+ n, _ = closer.Read(buf)
+ data = append(data, buf...)
+ }
+
+ _ = closer.Close()
+ }, window)
+ })
+
+ loginButton := widget.NewButton("Войти", func() {
+ var user = UserData{
+ Username: loginEntry.Text,
+ }
+ chatLayout(window, user, c)
+ })
+
+ back := widget.NewButton("Назад", func() {
+ startLayout(window, c)
+ })
+
+ mainContainer := container.NewCenter(container.NewVBox(
+ container.NewCenter(label), layout.NewSpacer(),
+ container.NewBorder(nil, nil, loginLabel, nil, loginEntry),
+ chooseKey,
+ loginButton,
+ back,
+ ))
+ window.SetContent(mainContainer)
+}
+
+func registerLayout(window fyne.Window, c chan string) {
+ window.SetTitle("Регистрация")
+
+ label := canvas.NewText("Chat", color.White)
+ label.TextSize = 40
+
+ loginLabel := widget.NewLabel("Логин: ")
+ loginEntry := widget.NewEntry()
+
+ generateKeys := widget.NewButton("Сгенерировать ключи подписи", func() {
+
+ })
+
+ registerButton := widget.NewButton("Зарегистрироваться", func() {
+
+ })
+
+ back := widget.NewButton("Назад", func() {
+ startLayout(window, c)
+ })
+
+ window.SetContent(container.NewCenter(container.NewVBox(
+ container.NewCenter(label), layout.NewSpacer(),
+ container.NewBorder(nil, nil, loginLabel, nil, loginEntry),
+ generateKeys,
+ registerButton,
+ back,
+ )))
+}
+
+func startLayout(window fyne.Window, c chan string) {
+ window.SetTitle("Chat")
+
+ label := canvas.NewText("Chat", color.White)
+ label.TextSize = 40
+ login := widget.NewButton("Войти", func() {
+ loginLayout(window, c)
+ })
+ signup := widget.NewButton("Зарегистрироваться", func() {
+ registerLayout(window, c)
+ })
+
+ mainContainer := container.NewCenter(container.NewVBox(
+ container.NewCenter(label), layout.NewSpacer(), login, signup))
+ window.SetContent(mainContainer)
+}
+
+func main() {
+ myApp := app.New()
+ window := myApp.NewWindow("")
+ channel := make(chan string)
+
+ startLayout(window, channel)
+ window.ShowAndRun()
+}