예제 #1
0
        private void Send(ClientInfo client, ContainerMessage message)
        {
            try
            {
                RaiseNewTextEvent($"Sending message [{message.Format()}]");

                string s = ContainerMessage.Serialize(message);

                byte[] buffer = ASCIIEncoding.Unicode.GetBytes(s);
                var    m      = new BasicMessage(_serverGuid, buffer);
                client.TcpSocketClientHandler.SendAsync(m);
            }
            catch (SocketException se)
            {
                // "An existing connection was forcibly closed by the remote host"
                RaiseNewTextEvent($"Container {_containerNames[client]} is disconnected.");
                _containerNames.Remove(client);
                client.TcpSocketClientHandler.Close();
                RaiseNewTextEvent($"Exception in Server.Send: {se.Message}.");
            }
            catch (Exception ex)
            {
                RaiseNewTextEvent($"Exception in Server.Send: {ex.Message}.");
            }
        }
예제 #2
0
        private void ProcessMessage(ContainerMessage message)
        {
            RaiseNewTextEvent($"Message received [{message.Format()}]");

            if (message.Sender == "Server" && message.Info == "Inform Invalid Name")
            {
                RaiseNewTextEvent("Container name refused by server.\r\n");
            }
            else if (message.Sender == "Server" && message.Info == "Inform Containers")
            {
                string[] toks = message.Content.Split();
                _allContainers.Clear();
                foreach (string t in toks)
                {
                    if (t != "" && t != " ")
                    {
                        _allContainers.Add(t);
                    }
                }
            }
            else if (message.Info == "Request Move Agent")
            {
                AgentHasArrived(message.Content);
            }
            else if (message.Info == "Send LD Message")
            {
                LDMessageReceived(message.Content);
            }
        }
예제 #3
0
        private void Send(ContainerMessage message)
        {
            try
            {
                RaiseNewTextEvent($"Sending message [{message.Format()}]");

                string s                 = ContainerMessage.Serialize(message);
                byte[] buffer            = ASCIIEncoding.Unicode.GetBytes(s);
                var    serializedMessage = new BasicMessage(_clientGuid, buffer);
                _client.SendAsync(serializedMessage);
            }
            catch (Exception ex)
            {
                RaiseNewTextEvent(ex.Message);
            }
        }
예제 #4
0
        private void ProcessMessage(ContainerMessage message, ClientInfo sender)
        {
            if (message.Sender == "Server")
            {
                return;
            }

            RaiseNewTextEvent($"Message received [{message.Format()}]");

            if (message.Receiver != "Server" && message.Info == "Request Move Agent")
            {
                RaiseNewTextEvent($"Moving agent from {message.Sender} to {message.Receiver}");
            }

            if (message.Receiver == "Server" && message.Info == "Request Register")
            {
                bool exists = false;

                foreach (string s in _containerNames.Values)
                {
                    if (s == message.Sender)
                    {
                        exists = true;
                        break;
                    }
                }

                if (exists)
                {
                    var m = new ContainerMessage("Server", message.Sender, "Inform Invalid Name", "");
                    Send(sender, m);
                    sender.TcpSocketClientHandler.Close();
                }
                else
                {
                    _containerNames[sender] = message.Sender;
                    DisplayContainerList();
                }
            }
            else if (message.Info == "Request Move Agent" || message.Info == "Send LD Message")
            {
                foreach (string s in _containerNames.Values)
                {
                    if (s == message.Sender)
                    {
                        ClientInfo[] clientList = _server.GetClientList();

                        if (clientList.Length == 0)
                        {
                            return;
                        }

                        foreach (ClientInfo ci in clientList)
                        {
                            if (_containerNames.ContainsKey(ci) && _containerNames[ci] == message.Receiver)
                            {
                                Send(ci, message);
                            }
                        }
                    }
                }
            }
        }