コード例 #1
0
 internal override void SendMessage(MessagePacket messagePacket)
 {
     foreach (var socket in workerSockets)
     {
         socket.Send(messagePacket.ToDataString(disterService.Serializer));
     }
 }
コード例 #2
0
 internal override void SendMessage(MessagePacket messagePacket)
 => socket.Send(messagePacket.ToDataString(disterService.Serializer));
コード例 #3
0
        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();
            }
        }