public LinkClient(SkynetAndroid.Base.SkynetAndroid mSkynet, string targetToxId, IPAddress ip, int port) { this.targetToxId = targetToxId; this.ip = ip; this.port = port; serverToxId = new ToxId(targetToxId); clientId = Guid.NewGuid().ToString(); this.mSkynet = mSkynet; messageQueue = new Queue <ToxRequest>(); lastActiveTime = DateTime.UtcNow; // send message to local loop Task.Run(() => { ToxRequest mReq; // if idle for 600s, shutdown while (runningFlag && (long)(DateTime.UtcNow - lastActiveTime).TotalMilliseconds < 600 * 1000) { mReq = getRequestToSend(); if (mReq != null && msgHandler != null) { lastActiveTime = DateTime.UtcNow; msgHandler(mReq.content); Utils.Log("Event: Received Message Complete, ClientId: " + clientId + ", MessageId: " + mReq.uuid); var response = mReq.createResponse(Encoding.UTF8.GetBytes("OK")); mSkynet.sendResponse(response, new ToxId(response.toToxId)); } else { Thread.Sleep(1); } } }); }
public static LinkClient Connect(SkynetAndroid.Base.SkynetAndroid mSkynet, string targetToxId, IPAddress ip, int port, Action <byte[]> msgHandler, Action closeHandler, Action <Exception> errorHander = null) { LinkClient mLinkClient = new LinkClient(mSkynet, targetToxId, ip, port); mLinkClient.msgHandler = msgHandler; mLinkClient.closeHandler = closeHandler; mLinkClient.errorHander = errorHander; var res = mLinkClient.HandShake().GetAwaiter().GetResult(); if (!res) { // 链接tox失败 mLinkClient.Close(); return(null); } var connectRes = mLinkClient.Connect().GetAwaiter().GetResult(); if (!connectRes) { // 创建socket失败 mLinkClient.Close(); return(null); } return(mLinkClient); }
public static LinkClient Connect(SkynetAndroid.Base.SkynetAndroid mSkynet, string targetToxId, string targetNodeID) { LinkClient mLinkClient = new LinkClient(mSkynet, targetToxId, null, 0); mLinkClient.serverId = targetNodeID; mLinkClient.serverToxId = new ToxId(targetToxId); mLinkClient.mSkynet.addNewReqListener(mLinkClient.clientId, mLinkClient.newReqListener); return(mLinkClient); }