public result quickplay() { if (!tc.isConnected()) { return new result(false, "connection lost"); } tcp.request req = new tcp.request((short)cmd.REQ_QUICKPLAY); if(!send(req)) { return new result(false, "network error: failed to send"); } return new result(); }
public result logout(int timeout) { if (!tc.isConnected()) return new result(); tcp.request req = new tcp.request((short)cmd.REQ_LOGOUT); tcp.response rsp = send(req, timeout); if (rsp == null) return new result(); int res = rsp.nextInt(); string msg = rsp.nextString(); Console.WriteLine("cmd=[{0}], sn=[{1}], result=[{2}], errmsg=[{3}]", rsp.cmd, rsp.sn, res, msg); return new result(res==0, msg); }
private tcp.response send(tcp.request req, int timeout /* ms */) { // 1. add to req-rsp match table lock (this) { match.Add(req.sn, null); } // 2. send request if (!req.send(tc)) { lock (this) { match.Remove(req.sn); } return null; } // 3. block wait tcp.response rsp = null; int tick = timeout > 100 ? 100 : timeout; while (tick > 0) { timeout -= tick; Thread.Sleep(tick); tick = timeout > 100 ? 100 : timeout; match.TryGetValue(req.sn, out rsp); if (rsp != null) break; } lock (this) { match.Remove(req.sn); } return rsp; }
public result login(string usr, string passwd, int timeout /* ms */) { if (!tc.isConnected()) { start(); if (!tc.isConnected()) return new result(false, "connection lost"); } tcp.request req = new tcp.request((short)cmd.REQ_LOGIN); req.encode(usr); req.encode(passwd); tcp.response rsp = send(req, timeout); if (rsp == null) { return new result(false, "no response"); } int result = rsp.nextInt(); string errmsg = rsp.nextString(); Console.WriteLine("cmd=[{0}], sn=[{1}], result=[{2}], errmsg=[{3}]", rsp.cmd, rsp.sn, result, errmsg); return new result(result==0, errmsg); }
private bool send(tcp.request req) { return req.send(tc); }