private void ExecuteThread() { NetworkChannel channel = null; try { // Connect channel = new NetworkChannel(Connection); // Request JsonSearchRequestMessage jsonRequestMessage = new JsonSearchRequestMessage(); JsonSearch jsonSearch = new JsonSearch() { Keyword = Keyword, Filter = Filter }; JsonSearchRequestData jsonRequestData = new JsonSearchRequestData() { Search = jsonSearch }; JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage, Group.Encrypt(jsonRequestData)); HttpRequest httpRequest = new HttpRequest(Session.Id) { Data = Session.Encrypt(jsonRequest) }; channel.Send(httpRequest); // Response HttpResponse httpResponse; channel.Receive(out httpResponse); Code = httpResponse.Code; if (httpResponse.Ok) { JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data)); JsonSearchResponseMessage jsonResponseMessage = JsonSearchResponseMessage.Parse(jsonResponse.Message); Debug.Assert(!string.IsNullOrEmpty(jsonResponseMessage.Id)); // Data SearchList.Id = jsonResponseMessage.Id; #if DEBUG Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse); #endif } } catch (Exception ex) { Console.WriteLine(ex.Message); } finally { if (channel != null) { channel.Shutdown(); } } }
public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest) { Clear(); // Connect NetworkChannel channel = new NetworkChannel(Connection); // Request JsonSearchRequestMessage jsonRequestMessage = JsonSearchRequestMessage.Parse(jsonRequest.Message); JsonSearchRequestData jsonRequestData = JsonSearchRequestData.Parse(Group.Decrypt(jsonRequest.Data)); JsonSearch jsonSearch = jsonRequestData.Search; // Data List <FileComponent> compFiles = FileMap.Search(jsonSearch); if (compFiles.Count == 0) { channel.SendNotFound(); return; } List <JsonFile> jsonFiles = new List <JsonFile>(); foreach (FileComponent file in compFiles) { JsonFile jsonFile = (JsonFile)file; jsonFiles.Add(jsonFile); } // Response JsonSearchResponseMessage jsonResponseMessage = new JsonSearchResponseMessage(); JsonSearchResponseData jsonResponseData = new JsonSearchResponseData() { Files = jsonFiles }; JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage, Group.Encrypt(jsonResponseData)); HttpResponse httpResponse = new HttpResponse() { Data = Session.Encrypt(jsonResponse) }; channel.Send(httpResponse); #if DEBUG Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse); #endif }
public List <FileComponent> Execute(HttpRequest httpRequest, JsonPacket jsonRequest) { Clear(); // Connect NetworkChannel channel = new NetworkChannel(Connection); // Response JsonSearchResponseMessage jsonResponseMessage = new JsonSearchResponseMessage(); JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage); HttpResponse httpResponse = new HttpResponse() { Data = Session.Encrypt(jsonResponse) }; channel.Send(httpResponse); #if DEBUG Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse); #endif // Request JsonSearchResponseMessage jsonRequestMessage = JsonSearchResponseMessage.Parse(jsonRequest.Message); string jsonId = jsonRequestMessage.Id; if (SearchList.Id != jsonId) { return(null); } JsonSearchResponseData jsonRequestData = JsonSearchResponseData.Parse(Group.Decrypt(jsonRequest.Data)); List <JsonFile> jsonFiles = jsonRequestData.Files; List <FileComponent> list = new List <FileComponent>(); // Data foreach (JsonFile jsonFile in jsonFiles) { FileComponent file = new FileComponent(jsonFile.Id, jsonFile.Name, jsonFile.Size) { Owner = Entity }; list.Add(file); } return(list); }
public HttpCode Execute(string jsonId, string jsonData) { Clear(); // Connect NetworkChannel channel = new NetworkChannel(Connection); // Request JsonSearchResponseMessage jsonRequestMessage = new JsonSearchResponseMessage(jsonId); JsonPacket jsonRequest = new JsonPacket(jsonRequestMessage, jsonData); HttpRequest httpRequest = new HttpRequest() { Data = Session.Encrypt(jsonRequest) }; // Response HttpResponse httpResponse; // NOTE: We need to lock this send/receive message pairs lock (Socket) { channel.Send(httpRequest); channel.Receive(out httpResponse); } Code = httpResponse.Code; if (httpResponse.Ok) { JsonPacket jsonResponse = JsonPacket.Parse(Session.Decrypt(httpResponse.Data)); #if DEBUG Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse); #endif } return(Code); }
public void Execute(HttpRequest httpRequest, JsonPacket jsonRequest, SessionComponent session) { Clear(); // Connect NetworkChannel channel = new NetworkChannel(Connection); // Request JsonSearchRequestMessage jsonRequestMessage = JsonSearchRequestMessage.Parse(jsonRequest.Message); // Data Entity entity = session.Owner; GroupComponent group = entity.Get <GroupComponent>(); EntityList entities = GroupList.Get(group.Id); if (entities == null) { channel.SendNotFound(); return; } // Response string jsonId = SecurityUtil.CreateKeyString(); JsonSearchResponseMessage jsonResponseMessage = new JsonSearchResponseMessage(jsonId); JsonPacket jsonResponse = new JsonPacket(jsonResponseMessage); HttpResponse httpResponse = new HttpResponse() { Data = session.Encrypt(jsonResponse) }; channel.Send(httpResponse); // Optimization: Keep track of the search list for faster downloads SearchListComponent download = entity.Get <SearchListComponent>(); download.Clear(); // Command lock (entities) { foreach (Entity e in entities) { // Do not search yourself if (entity.Id.Equals(e.Id)) { continue; } TunnelComponent tunnel = e.Get <TunnelComponent>(); if (!tunnel.Connected) { continue; } CommandState state = new CommandState() { Id = jsonId, Data = jsonRequest.Data, Source = entity, Target = e }; Thread thread = new Thread(new ParameterizedThreadStart(ExecuteThread)) { Priority = ThreadPriority.BelowNormal, IsBackground = true }; thread.Start(state); } } #if DEBUG Log.Add(httpRequest, httpResponse, jsonRequest, jsonResponse); #endif }