internal override void SendMessage(MessagePacket messagePacket) { foreach (var socket in workerSockets) { socket.Send(messagePacket.ToDataString(disterService.Serializer)); } }
internal override void SendMessage(MessagePacket messagePacket) => socket.Send(messagePacket.ToDataString(disterService.Serializer));
private void HandleMessage(MessagePacket messagePacket, Socket workerSocket) { if (messagePacket.Type == MessageType.NoResponseRequest) { disterService.MessageHandlers.Handle(messagePacket); } else if (messagePacket.Type == MessageType.ResponseRequest) { var result = disterService.MessageHandlers.Handle(messagePacket); var response = new MessagePacket() { Id = messagePacket.Id }; if (result == null) { response.Type = MessageType.NullResponse; } else { response.Type = MessageType.Response; response.Content = disterService.Serializer.Serialize(result); } var data = response.ToDataString(disterService.Serializer); workerSocket.Send(data); } else if (messagePacket.Type == MessageType.VariableSet) { var name = messagePacket.Topic; var value = disterService.Serializer.Deserialize <object>(messagePacket.Content); disterService.DisterVariablesController.SetDisterVariable(name, value); } else if (messagePacket.Type == MessageType.VariableGet) { var value = disterService.DisterVariablesController.GetDisterVariable <object>(messagePacket.Topic); MessagePacket response; if (value.IsSome) { response = new MessagePacket { Id = messagePacket.Id, Content = disterService.Serializer.Serialize(value.Value), Type = MessageType.Response }; } else { response = new MessagePacket { Id = messagePacket.Id, Type = MessageType.NullResponse }; } workerSocket.Send(response.ToDataString(disterService.Serializer)); } else if (messagePacket.Type == MessageType.Enqueue) { var name = messagePacket.Topic; var value = disterService.Serializer.Deserialize <object>(messagePacket.Content); disterService.DisterVariablesController.Enqueue(name, value); } else if (messagePacket.Type == MessageType.Dequeue) { var name = messagePacket.Topic; var value = disterService.DisterVariablesController.Dequeue <object>(name); MessagePacket response; if (value.IsSome) { response = new MessagePacket { Id = messagePacket.Id, Content = disterService.Serializer.Serialize(value.Value), Type = MessageType.Response }; } else { response = new MessagePacket { Id = messagePacket.Id, Type = MessageType.NullResponse }; } workerSocket.Send(response.ToDataString(disterService.Serializer)); } else if (messagePacket.Type == MessageType.DictionarySet) { var kvPair = disterService.Serializer.Deserialize <KeyValuePair <object, object> >(messagePacket.Content); var name = messagePacket.Topic; disterService.DisterVariablesController.SetInDictionary(name, kvPair.Key, kvPair.Value); } else if (messagePacket.Type == MessageType.DictionaryGet) { var key = disterService.Serializer.Deserialize <object>(messagePacket.Content); var name = messagePacket.Topic; var value = disterService.DisterVariablesController.GetFromDictionary <object>(name, key); MessagePacket response; if (value.IsSome) { response = new MessagePacket { Id = messagePacket.Id, Content = disterService.Serializer.Serialize(value.Value), Type = MessageType.Response }; } else { response = new MessagePacket { Id = messagePacket.Id, Type = MessageType.NullResponse }; } workerSocket.Send(response.ToDataString(disterService.Serializer)); } else if (messagePacket.Type == MessageType.Log) { var log = disterService.Serializer.Deserialize <Log>(messagePacket.Content); disterService.LogAggregator?.Log(log); } else if (messagePacket.Type == MessageType.WorkChunkRequest) { var name = messagePacket.Topic; var id = messagePacket.Id; var result = disterService.WorkChunkGenerators.Generete <object>(name, id); MessagePacket response; if (result.IsNone) { response = new MessagePacket { Id = id, Type = MessageType.NullResponse }; } else { response = new MessagePacket { Id = id, Type = MessageType.Response, Content = disterService.Serializer.Serialize(result.Value) }; } workerSocket.Send(response.ToDataString(disterService.Serializer)); } else if (messagePacket.Type == MessageType.WorkChunkResponse) { disterService.WorkChunkGenerators.HandleResponse(messagePacket.Topic, messagePacket.Id, messagePacket.Content); } else { throw new NotImplementedException(); } }