无纸化会议-数据绑定和网络连接
数据绑定和网络连接功能基本完成,现在客户端可以通过网络请求同步服务器数据了。
界面中硬编码的文字,比如标题和时钟,已经替换成了实时更新的数据,根据后端提供的http接口文档编写了对应的数据类,实现了网络请求功能。
http请求实现方案
客户端http请求使用RestSharp库实现,使用Newtonsoft.Json库实现json的编解码
关键代码举例
public static string post(string rootPath,Dictionary<string,object> jsonRequest)
{
string url = WebUtil.url(rootPath);
Dictionary<string, object> dict = jsonRequest;
Log.l(name, "post");
Log.l(name, "url", url);
var client = new RestClient(url);
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData = true;
foreach (string key in dict.Keys) {
request.AddParameter(key, dict[key]);
Log.l(name, "param", $"{key}:{dict[key]}");
}
var response = client.Post(request);
Log.l(name, "status", response.StatusCode.ToString());
string res = response.Content;
Log.l(name, "res", res);
JObject j = (JObject)JsonConvert.DeserializeObject(res);
return JsonConvert.SerializeObject(j["obj"]);
}
public static void downloadFile(int id,string localName)
{
var client = new RestClient(url("/file/download"));
var request = new RestRequest();
request.AddParameter("fileId", id);
byte[] data =client.DownloadData(request);
FileStream f = new FileStream(Path.Combine(Settings.fileDir,localName),FileMode.OpenOrCreate);
BinaryWriter binaryWriter = new BinaryWriter(f);
binaryWriter.Write(data);
}
public static string url(string path)
{
return string.Format("{0}://{1}:{2}{3}", Settings.protocol, Settings.domain, Settings.port, path);
}
List<util.Vote> getVoteList(int meetingId, int deviceId) {
Dictionary<string, object> dict = new Dictionary<string, object>();
dict["meetingId"] = meetingId;
dict["deviceId"] = deviceId;
string str = WebUtil.post("/vote/getVoteList", dict);
return JsonConvert.DeserializeObject<List<util.Vote>>(str);
}
List<util.File> getFileList(int meetingId, int roleId)
{
Dictionary<string, object> dict = new Dictionary<string, object>();
dict["meetingId"] = meetingId;
dict["roleId"] = roleId;
string str = WebUtil.post("/file/getFileList", dict);
return JsonConvert.DeserializeObject<List<util.File>>(str);
}
4月19日下午和负责后端的同学进行了联调,排除了连接过程的编码缺陷。
此外对仓库进行了更新,将之前由于疏忽而遗漏的生成文件目录加入进了gitignore中并更新了git的index,同时新开了release_client等分支,使仓库结构更加合理。