279 lines
8.0 KiB
Dart
279 lines
8.0 KiB
Dart
/// Licensed to the Apache Software Foundation (ASF) under one
|
|
/// or more contributor license agreements. See the NOTICE file
|
|
/// distributed with this work for additional information
|
|
/// regarding copyright ownership. The ASF licenses this file
|
|
/// to you under the Apache License, Version 2.0 (the
|
|
/// "License"); you may not use this file except in compliance
|
|
/// with the License. You may obtain a copy of the License at
|
|
///
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
///
|
|
/// Unless required by applicable law or agreed to in writing,
|
|
/// software distributed under the License is distributed on an
|
|
/// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
/// KIND, either express or implied. See the License for the
|
|
/// specific language governing permissions and limitations
|
|
/// under the License.
|
|
|
|
import 'dart:html';
|
|
|
|
import 'package:thrift/thrift.dart';
|
|
import 'package:thrift/thrift_browser.dart';
|
|
import 'package:shared/shared.dart';
|
|
import 'package:tutorial/tutorial.dart';
|
|
|
|
/// Adapted from the AS3 tutorial
|
|
void main() {
|
|
new CalculatorUI(querySelector('#output')).start();
|
|
}
|
|
|
|
class CalculatorUI {
|
|
final DivElement output;
|
|
|
|
CalculatorUI(this.output);
|
|
|
|
TTransport _transport;
|
|
Calculator _calculatorClient;
|
|
|
|
void start() {
|
|
_buildInterface();
|
|
_initConnection();
|
|
}
|
|
|
|
void _validate() {
|
|
if (!_transport.isOpen) {
|
|
window.alert("The transport is not open!");
|
|
}
|
|
}
|
|
|
|
void _initConnection() {
|
|
_transport = new TAsyncClientSocketTransport(
|
|
new TWebSocket(Uri.parse('ws://127.0.0.1:9090/ws')),
|
|
new TMessageReader(new TBinaryProtocolFactory()));
|
|
TProtocol protocol = new TBinaryProtocol(_transport);
|
|
_transport.open();
|
|
|
|
_calculatorClient = new CalculatorClient(protocol);
|
|
}
|
|
|
|
void _buildInterface() {
|
|
output.children.forEach((e) {
|
|
e.remove();
|
|
});
|
|
|
|
_buildPingComponent();
|
|
|
|
_buildAddComponent();
|
|
|
|
_buildCalculatorComponent();
|
|
|
|
_buildGetStructComponent();
|
|
}
|
|
|
|
void _buildPingComponent() {
|
|
output.append(new HeadingElement.h3()..text = "Ping");
|
|
ButtonElement pingButton = new ButtonElement()
|
|
..text = "PING"
|
|
..onClick.listen(_onPingClick);
|
|
output.append(pingButton);
|
|
}
|
|
|
|
void _onPingClick(MouseEvent e) {
|
|
_validate();
|
|
|
|
_calculatorClient.ping();
|
|
}
|
|
|
|
void _buildAddComponent() {
|
|
output.append(new HeadingElement.h3()..text = "Add");
|
|
InputElement num1 = new InputElement()
|
|
..id = "add1"
|
|
..type = "number"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px";
|
|
output.append(num1);
|
|
SpanElement op = new SpanElement()
|
|
..text = "+"
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px";
|
|
output.append(op);
|
|
InputElement num2 = new InputElement()
|
|
..id = "add2"
|
|
..type = "number"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px"
|
|
..style.marginLeft = "10px";
|
|
output.append(num2);
|
|
ButtonElement addButton = new ButtonElement()
|
|
..text = "="
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px"
|
|
..onClick.listen(_onAddClick);
|
|
output.append(addButton);
|
|
SpanElement result = new SpanElement()
|
|
..id = "addResult"
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px";
|
|
output.append(result);
|
|
}
|
|
|
|
void _onAddClick(MouseEvent e) {
|
|
_validate();
|
|
|
|
InputElement num1 = querySelector("#add1");
|
|
InputElement num2 = querySelector("#add2");
|
|
SpanElement result = querySelector("#addResult");
|
|
|
|
_calculatorClient
|
|
.add(int.parse(num1.value), int.parse(num2.value))
|
|
.then((int n) {
|
|
result.text = "$n";
|
|
});
|
|
}
|
|
|
|
void _buildCalculatorComponent() {
|
|
output.append(new HeadingElement.h3()..text = "Calculator");
|
|
InputElement num1 = new InputElement()
|
|
..id = "calc1"
|
|
..type = "number"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px";
|
|
output.append(num1);
|
|
SelectElement op = new SelectElement()
|
|
..id = "calcOp"
|
|
..multiple = false
|
|
..selectedIndex = 0
|
|
..style.fontSize = "16px"
|
|
..style.marginLeft = "10px"
|
|
..style.width = "50px";
|
|
OptionElement addOp = new OptionElement()
|
|
..text = "+"
|
|
..value = Operation.ADD.toString();
|
|
op.add(addOp, 0);
|
|
OptionElement subtractOp = new OptionElement()
|
|
..text = "-"
|
|
..value = Operation.SUBTRACT.toString();
|
|
op.add(subtractOp, 1);
|
|
OptionElement multiplyOp = new OptionElement()
|
|
..text = "*"
|
|
..value = Operation.MULTIPLY.toString();
|
|
op.add(multiplyOp, 2);
|
|
OptionElement divideOp = new OptionElement()
|
|
..text = "/"
|
|
..value = Operation.DIVIDE.toString();
|
|
op.add(divideOp, 3);
|
|
output.append(op);
|
|
InputElement num2 = new InputElement()
|
|
..id = "calc2"
|
|
..type = "number"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px"
|
|
..style.marginLeft = "10px";
|
|
output.append(num2);
|
|
ButtonElement calcButton = new ButtonElement()
|
|
..text = "="
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px"
|
|
..onClick.listen(_onCalcClick);
|
|
output.append(calcButton);
|
|
SpanElement result = new SpanElement()
|
|
..id = "calcResult"
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px";
|
|
output.append(result);
|
|
output.append(new BRElement());
|
|
output.append(new BRElement());
|
|
LabelElement logIdLabel = new LabelElement()
|
|
..text = "Log ID:"
|
|
..style.fontSize = "14px";
|
|
output.append(logIdLabel);
|
|
InputElement logId = new InputElement()
|
|
..id = "logId"
|
|
..type = "number"
|
|
..value = "1"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px"
|
|
..style.marginLeft = "10px";
|
|
output.append(logId);
|
|
LabelElement commentLabel = new LabelElement()
|
|
..text = "Comment:"
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px";
|
|
output.append(commentLabel);
|
|
InputElement comment = new InputElement()
|
|
..id = "comment"
|
|
..style.fontSize = "14px"
|
|
..style.width = "100px"
|
|
..style.marginLeft = "10px";
|
|
output.append(comment);
|
|
}
|
|
|
|
void _onCalcClick(MouseEvent e) {
|
|
_validate();
|
|
|
|
InputElement num1 = querySelector("#calc1");
|
|
InputElement num2 = querySelector("#calc2");
|
|
SelectElement op = querySelector("#calcOp");
|
|
SpanElement result = querySelector("#calcResult");
|
|
InputElement logId = querySelector("#logId");
|
|
InputElement comment = querySelector("#comment");
|
|
|
|
int logIdValue = int.parse(logId.value);
|
|
logId.value = (logIdValue + 1).toString();
|
|
|
|
Work work = new Work();
|
|
work.num1 = int.parse(num1.value);
|
|
work.num2 = int.parse(num2.value);
|
|
work.op = int.parse(op.options[op.selectedIndex].value);
|
|
work.comment = comment.value;
|
|
|
|
_calculatorClient.calculate(logIdValue, work).then((int n) {
|
|
result.text = "$n";
|
|
});
|
|
}
|
|
|
|
void _buildGetStructComponent() {
|
|
output.append(new HeadingElement.h3()..text = "Get Struct");
|
|
LabelElement logIdLabel = new LabelElement()
|
|
..text = "Struct Key:"
|
|
..style.fontSize = "14px";
|
|
output.append(logIdLabel);
|
|
InputElement logId = new InputElement()
|
|
..id = "structKey"
|
|
..type = "number"
|
|
..value = "1"
|
|
..style.fontSize = "14px"
|
|
..style.width = "50px"
|
|
..style.marginLeft = "10px";
|
|
output.append(logId);
|
|
ButtonElement getStructButton = new ButtonElement()
|
|
..text = "GET"
|
|
..style.fontSize = "14px"
|
|
..style.marginLeft = "10px"
|
|
..onClick.listen(_onGetStructClick);
|
|
output.append(getStructButton);
|
|
output.append(new BRElement());
|
|
output.append(new BRElement());
|
|
TextAreaElement result = new TextAreaElement()
|
|
..id = "getStructResult"
|
|
..style.fontSize = "14px"
|
|
..style.width = "300px"
|
|
..style.height = "50px"
|
|
..style.marginLeft = "10px";
|
|
output.append(result);
|
|
}
|
|
|
|
void _onGetStructClick(MouseEvent e) {
|
|
_validate();
|
|
|
|
InputElement structKey = querySelector("#structKey");
|
|
TextAreaElement result = querySelector("#getStructResult");
|
|
|
|
_calculatorClient
|
|
.getStruct(int.parse(structKey.value))
|
|
.then((SharedStruct s) {
|
|
result.text = "${s.toString()}";
|
|
});
|
|
}
|
|
}
|