Exemple #1
0
        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);
                    }
                }
            });
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }