// Called when a ConnectAsync operation completes private void ProcessConnect(SocketAsyncEventArgs e) { if (e.SocketError == SocketError.Success) { Logger.WriteStr("Successfully connected to the server on " + ((AgentAsyncUserToken)(e.UserToken)).Socket.LocalEndPoint.ToString()); retryIntervalCurrent = retryIntervalInitial; // set it to initial value //Send authorization info about this client as soon as connection established var idata = new IdentificationData(); OpProcessor.GetInfo(idata); // fill required data var message = new ResponseMessage { Response = idata }; SendMessage(e, WoxalizerAdapter.SerializeToXml(message, TypeResolving.AssemblyResolveHandler)); } else { int ex = (int)e.SocketError; Console.WriteLine("Cannot connect to server " + e.RemoteEndPoint.ToString() + ". Will try again in " + retryIntervalCurrent + " seconds"); Logger.WriteStr("Cannot connect to server " + e.RemoteEndPoint.ToString() + ". Will try again in " + retryIntervalCurrent + " seconds"); Logger.WriteStr(" (Exception: " + ex.ToString() + ")"); Thread.Sleep(retryIntervalCurrent * 1000); if (retryIntervalCurrent < retryIntervalMaximum) //increase interval between reconnects up to retryIntervalMaximum value. { retryIntervalCurrent += 5; } e.SocketError = 0; //clear Error info and try to connect again ((AgentAsyncUserToken)e.UserToken).Socket.ConnectAsync(e); return; } }
protected override void ProcessReceivedMessageRequest(SocketAsyncEventArgs e, RequestMessage message) { var token = (AgentAsyncUserToken)e.UserToken; ResponseMessage responseMsg; switch (message.OpCode) { case (int)EOpCode.IpConfigData: var ipdata = new IpConfigData(); OpProcessor.GetInfo(ipdata, ((IPEndPoint)token.Socket.LocalEndPoint).Address.ToString()); // fill required data responseMsg = new ResponseMessage { Response = ipdata }; SendMessage(e, WoxalizerAdapter.SerializeToXml(responseMsg, TypeResolving.AssemblyResolveHandler)); break; case (int)EOpCode.RunProcess: RunCompletedStatus result = OpProcessor.StartProcess((RunProcess)message.Request); responseMsg = new ResponseMessage { Response = result }; SendMessage(e, WoxalizerAdapter.SerializeToXml(responseMsg, TypeResolving.AssemblyResolveHandler)); break; case (int)EOpCode.OsInfo: var os = new OsInfo(); OpProcessor.GetInfo(os); break; // //TODO: Add all OpCodes... break; default: throw new ArgumentException("WARNING: Got unknown operation code request!"); } }