protected override void Because()
        {
            serverMessageReceived = new ServerMessageReceived {
                Message = "not private message"
            };

            sut.Handle(serverMessageReceived);
        }
        protected override void Because()
        {
            serverMessageReceived = new ServerMessageReceived {
                Message = "PRIVMSG hello hello"
            };

            sut.Handle(serverMessageReceived);
        }
        public static bool Connect(Dictionary <string, object> args)
        {
            string sysname  = args["sysname"].ToString();
            string username = args["username"].ToString();
            string password = args["password"].ToString();

            bool connectionFinished = false;


            new Thread(() =>
            {
                Thread.Sleep(10000);
                if (connectionFinished == false)
                {
                    Applications.Terminal.IsInRemoteSystem = false;
                    Applications.Terminal.RemoteSystemName = "";
                    Applications.Terminal.RemoteUser       = "";
                    Applications.Terminal.RemotePass       = "";
                    TerminalBackend.PrefixEnabled          = true;
                    Console.WriteLine("[rts] Connection failed, target system did not respond.");
                    TerminalBackend.PrintPrompt();
                }
            }).Start();

            ServerMessageReceived smr = null;

            smr = (msg) =>
            {
                if (msg.Name == "msgtosys")
                {
                    var m = JsonConvert.DeserializeObject <ServerMessage>(msg.Contents);
                    if (m.GUID.Split('|')[2] != ServerManager.thisGuid.ToString())
                    {
                        connectionFinished             = true;
                        ServerManager.MessageReceived -= smr;
                    }
                }
            };
            ServerManager.MessageReceived += smr;
            ServerManager.SendMessageToIngameServer(sysname, 21, "cmd", JsonConvert.SerializeObject(new RTSMessage
            {
                SenderSystemName = SaveSystem.CurrentSave.SystemName,
                Username         = username,
                Password         = password,
                Namespace        = "trm",
                Command          = "clear"
            }));
            Applications.Terminal.IsInRemoteSystem = true;
            Applications.Terminal.RemoteSystemName = sysname;
            Applications.Terminal.RemoteUser       = username;
            Applications.Terminal.RemotePass       = password;
            TerminalBackend.PrefixEnabled          = false;
            return(true);
        }
示例#4
0
 private void FSD_TextMessageReceived(object sender, DataReceivedEventArgs <PDUTextMessage> e)
 {
     if (e.PDU.From.ToUpper() == "SERVER")
     {
         ServerMessageReceived?.Invoke(this, new NetworkDataReceivedEventArgs(e.PDU.From.ToUpper(), e.PDU.Message));
     }
     else
     {
         PrivateMessageReceived?.Invoke(this, new NetworkDataReceivedEventArgs(e.PDU.From, e.PDU.Message));
     }
 }
        //private async Task DispatchEvent(string message)
        //{
        //    if (MessageReceived != null)
        //    {
        //        await dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        //            new DispatchedHandler(() =>
        //            {
        //                MessageReceived?.Invoke(this, message);
        //            }));
        //    }
        //}

        private async Task DispatchServerEvent(string message)
        {
            if (ServerMessageReceived != null)
            {
                await dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                          new DispatchedHandler(() =>
                {
                    ServerMessageReceived?.Invoke(this, message);
                }));
            }
        }
示例#6
0
        /// <summary>
        /// Static constructor for <see cref="TerminalBackend"/>.
        /// </summary>
        static TerminalBackend()
        {
            ServerMessageReceived onMessageReceived = (msg) =>
            {
                if (msg.Name == "trm_invokecommand")
                {
                    string text3 = "";
                    string text4 = msg.Contents;

                    if (TerminalBackend.PrefixEnabled)
                    {
                        text3 = text4.Remove(0, $"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ".Length);
                    }
                    IsForwardingConsoleWrites = true;
                    if (TerminalBackend.InStory == false)
                    {
                        TerminalBackend.InvokeCommand(text3, true);
                    }
                    if (TerminalBackend.PrefixEnabled)
                    {
                        Console.Write($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
                    }
                    IsForwardingConsoleWrites = false;
                }
                else if (msg.Name == "pleasewrite")
                {
                    Console.Write(msg.Contents);
                }
                else if (msg.Name == "handshake_from")
                {
                    var    a     = JsonConvert.DeserializeObject <Dictionary <string, object> >(msg.Contents);
                    string uName = a["username"] as string;
                    string pass  = a["password"] as string;
                    string sys   = a["sysname"] as string;
                    string guid  = msg.GUID;
                    if (SaveSystem.CurrentUser.Username == uName && SaveSystem.CurrentSave.Password == pass && CurrentSave.SystemName == sys)
                    {
                        ForwardGUID = guid;
                        ServerManager.SendMessage("trm_handshake_accept", $@"{{
    guid: ""{ServerManager.thisGuid}"",
    target: ""{guid}""
}}");

                        IsForwardingConsoleWrites = true;
                        InvokeCommand("sos.status");
                        Console.Write($"{SaveSystem.CurrentUser.Username}@{SaveSystem.CurrentSave.SystemName}:~$ ");
                        IsForwardingConsoleWrites = false;
                    }
                }
            };

            ServerManager.MessageReceived += onMessageReceived;
        }
        private void ServerForm_Load(object sender, EventArgs e)
        {
            this.Enabled = false;
            StartStopServer       dele            = this.ActionStartStop;
            ServerMessageReceived messageReceived = this.ServerCommandReceived;
            ServerMessageResponse messageResponse = this.ServerCommandResponse;
            AddClientsToServer    addClient       = this.AddClientToServer;
            RemoveClientsToServer removeClient    = this.RemoveClientToServer;
            SetServerIPAddress    serverIP        = this.DisplayServerIP;

            _server      = new Server(this, dele, messageReceived, messageResponse, addClient, removeClient, serverIP);
            this.Enabled = true;
        }
示例#8
0
文件: Proxy.cs 项目: HTD/Woof.Sockets
        /// <summary>
        /// Handles incoming messages from remote sessions.
        /// </summary>
        /// <param name="sender">Remote session.</param>
        /// <param name="e">Formal junk.</param>
        private void Remote_MessageReceived(object sender, EventArgs e)
        {
            var remote  = sender as ActiveSession <T>;
            var session = remote.Owner.Origin;

            if (remote.Message == null || ((object)remote.Message is X690.Message m && m.IsEndSession))
            {
                session.Close(); return;
            }
            ServerMessageReceived?.Invoke(session, new MessageEventArgs <T>(remote, remote.Message));
            if (session.IsActive)
            {
                session.Send(remote.Message);
            }
        }
示例#9
0
        // Constructor
        public Server(ServerForm form, StartStopServer del, ServerMessageReceived action,
                      ServerMessageResponse actionResponse, AddClientsToServer addClient,
                      RemoveClientsToServer removeClient, SetServerIPAddress serverIPDelegate)
        {
            // Create thread
            _serverThread      = new Thread(new ThreadStart(ServerMainThreadFunction));
            _serverThread.Name = "Server Main Thread";
            _serverThread.Start();

            // Create thread for UDP connection
            _threadSendToClient      = new Thread(new ThreadStart(ThreadReceiveResponse));
            _threadSendToClient.Name = "Server Thread Listener";
            _threadSendToClient.Start();

            _parentForm            = form;
            _endActionDelegate     = del;
            _messageReceivedAction = action;
            _messageResponseAction = actionResponse;
            _addClientDelegate     = addClient;
            _removeClientDelegate  = removeClient;
            _displayServerIP       = serverIPDelegate;

            // Get directory of job
            _directoryWork = Directory.GetCurrentDirectory();

            // Get local IP address
            _serverIPAddress = GetPublicIPAddress();

            _parentForm.Invoke(_displayServerIP, (object)_serverIPAddress);

            // How enable port forwarding
            NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass();
            _mappingsPort = upnpnat.StaticPortMappingCollection;

            GetLocalIPAddress();

            try
            {
                _mappingsPort.Add(_numberOfPortToListen, "TCP", _numberOfPortToListen, GetLocalIPAddress(), true, "CNC TCP Server");
            }
            catch (Exception excp)
            {
                MessageBox.Show(excp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                // Send action
                _parentForm.Invoke(this._endActionDelegate, (object)false);
                return;
            }
        }
示例#10
0
        /// <summary>
        ///     Event handler for messages arriving at the server from a client.
        /// </summary>
        /// <param name="sender">The client that sent.</param>
        /// <param name="args">The event args.</param>
        /// <param name="serverID">The ID of the server that received this message.</param>
        private void ServerMessageReceivedFromClient(object sender, Server.MessageReceivedEventArgs args, ushort serverID)
        {
            // Record message
            using (Message message = args.GetMessage())
            {
                string str;
                using (DarkRiftReader reader = message.GetReader())
                {
                    if (reader.Length > 0)
                    {
                        str = reader.ReadString();
                    }
                    else
                    {
                        str = null;
                    }
                }

                messageAssertions.AddMessageOnServer(new ReceivedMessage(str, args.Client.ID, serverID, message.Tag, args.SendMode));
            }

            // Call to other event handlers
            ServerMessageReceived.Invoke(sender, args);
        }
示例#11
0
        private async Task StartReceive(CancellationToken token)
        {
            while (!token.IsCancellationRequested)
            {
                if (!_networkStream.DataAvailable || !_networkStream.CanRead)
                {
                    await Task.Delay(UpdateFrequency, token);

                    continue;
                }
                byte[] data;

                try
                {
                    data = await ReadAvailableData(token);
                }
                catch
                {
                    IsStarted = false;
                    OnFaulted();
                    return;
                }


                if (data == null)
                {
                    break;
                }

                ServerMessageReceived?.Invoke(this, new MidgeMessageReceivedEventArgs(Encoding.GetString(data)));
            }

            Tcp?.Close();
            IsStarted = false;
            OnStopped();
        }
示例#12
0
        private void ListeningProc()
        {
            while (true)
            {
                Message message = _stream.ReadMessage();

                switch (message)
                {
                case ServerMessage serverMessage:
                    if (serverMessage is WelcomeMessage welcomeMessage)
                    {
                        Name = welcomeMessage.Name;
                    }
                    ServerMessageReceived?.Invoke(this, serverMessage);
                    break;

                case RelayMessage relayMessage:
                    MessageReceived?.Invoke(this, relayMessage);
                    break;

                    // TODO: support other messages
                }
            }
        }
示例#13
0
        /// <summary>
        /// Finish bootstrapping the engine.
        /// </summary>
        private static void FinishBootstrap()
        {
            ServerMessageReceived savehandshake = null;

            savehandshake = (msg) =>
            {
                if (msg.Name == "mud_savefile")
                {
                    ServerManager.MessageReceived -= savehandshake;
                    try
                    {
                        CurrentSave = JsonConvert.DeserializeObject <Save>(msg.Contents);
                    }
                    catch
                    {
                        Console.WriteLine("{ENGINE_CANNOTLOADSAVE}");
                        oobe.PromptForLogin();
                    }
                }
                else if (msg.Name == "mud_login_denied")
                {
                    ServerManager.MessageReceived -= savehandshake;
                    oobe.PromptForLogin();
                }
            };
            ServerManager.MessageReceived += savehandshake;


            ReadSave();

            while (CurrentSave == null)
            {
                Thread.Sleep(10);
            }

            Shiftorium.Init();

            while (CurrentSave.StoryPosition < 1)
            {
                Thread.Sleep(10);
            }

            Thread.Sleep(75);

            Thread.Sleep(50);
            Console.WriteLine("{MISC_ACCEPTINGLOGINS}");

Sysname:
            bool waitingForNewSysName = false;
            bool gobacktosysname = false;

            if (string.IsNullOrWhiteSpace(CurrentSave.SystemName))
            {
                Infobox.PromptText("{TITLE_ENTERSYSNAME}", "{PROMPT_ENTERSYSNAME}", (name) =>
                {
                    if (string.IsNullOrWhiteSpace(name))
                    {
                        Infobox.Show("{TITLE_INVALIDNAME}", "{PROMPT_INVALIDNAME}.", () =>
                        {
                            gobacktosysname      = true;
                            waitingForNewSysName = false;
                        });
                    }
                    else if (name.Length < 5)
                    {
                        Infobox.Show("{TITLE_VALUESMALL}", "{PROMPT_SMALLSYSNAME}", () =>
                        {
                            gobacktosysname      = true;
                            waitingForNewSysName = false;
                        });
                    }
                    else
                    {
                        CurrentSave.SystemName = name;
                        SaveSystem.SaveGame();
                        gobacktosysname      = false;
                        waitingForNewSysName = false;
                    }
                });
            }

            while (waitingForNewSysName)
            {
                Thread.Sleep(10);
            }

            if (gobacktosysname)
            {
                goto Sysname;
            }

            if (CurrentSave.Users == null)
            {
                CurrentSave.Users = new List <ClientSave>();
            }

            Console.WriteLine($@"
                   `-:/++++::.`                   
              .+ydNMMMMMNNMMMMMNhs/.              
           /yNMMmy+:-` `````.-/ohNMMms-           
        `oNMMh/.`:oydmNMMMMNmhs+- .+dMMm+`             {{GEN_WELCOME}}
      `oMMmo``+dMMMMMMMMMMMMMMMMMNh/`.sNMN+       
     :NMN+ -yMMMMMMMNdhyssyyhdmNMMMMNs``sMMd.          {{GEN_SYSTEMSTATUS}}
    oMMd.`sMMMMMMd+.            `/MMMMN+ -mMN:         ----------------------
   oMMh .mMMMMMM/     `-::::-.`  :MMMMMMh`.mMM:   
  :MMd .NMMMMMMs    .dMMMMMMMMMNddMMMMMMMd`.NMN.        {{GEN_CODEPOINTS}}:     {SaveSystem.CurrentSave.Codepoints}
  mMM. dMMMMMMMo    -mMMMMMMMMMMMMMMMMMMMMs /MMy        
 :MMh :MMMMMMMMm`     .+shmMMMMMMMMMMMMMMMN` NMN`                       
 oMM+ sMMMMMMMMMN+`        `-/smMMMMMMMMMMM: hMM:       
 sMM+ sMMMMMMMMMMMMds/-`        .sMMMMMMMMM/ yMM/ 
 +MMs +MMMMMMMMMMMMMMMMMmhs:`     +MMMMMMMM- dMM-       {{GEN_SYSTEMNAME}}:    {CurrentSave.SystemName.ToUpper()}
 .MMm `NMMMMMMMMMMMMMMMMMMMMMo    `NMMMMMMd .MMN        {{GEN_USERS}}:          {Users.Count()}.
  hMM+ +MMMMMMmsdNMMMMMMMMMMN/    -MMMMMMN- yMM+        
  `NMN- oMMMMMd   `-/+osso+-     .mMMMMMN: +MMd   
   -NMN: /NMMMm`               :yMMMMMMm- oMMd`   
    -mMMs``sMMMMNdhso++///+oydNMMMMMMNo .hMMh`    
     `yMMm/ .omMMMMMMMMMMMMMMMMMMMMd+``oNMNo      
       -hMMNo. -ohNMMMMMMMMMMMMmy+. -yNMNy`       
         .sNMMms/. `-/+++++/:-` ./yNMMmo`         
            :sdMMMNdyso+++ooshdNMMMdo-            
               `:+yhmNNMMMMNNdhs+-                
                       ````                       ");

            if (CurrentSave.Users.Count == 0)
            {
                CurrentSave.Users.Add(new ClientSave
                {
                    Username    = "******",
                    Password    = "",
                    Permissions = UserPermissions.Root
                });
                Console.WriteLine("{MISC_NOUSERS}");
            }
            TerminalBackend.InStory = false;

            TerminalBackend.PrefixEnabled = false;

            if (LoginManager.ShouldUseGUILogin)
            {
                Action <ClientSave> Completed = null;
                Completed += (user) =>
                {
                    CurrentUser = user;
                    LoginManager.LoginComplete -= Completed;
                };
                LoginManager.LoginComplete += Completed;
                Desktop.InvokeOnWorkerThread(() =>
                {
                    LoginManager.PromptForLogin();
                });
                while (CurrentUser == null)
                {
                    Thread.Sleep(10);
                }
            }
            else
            {
Login:
                string username = "";
                int  progress           = 0;
                bool goback             = false;
                TextSentEventHandler ev = null;
                string loginstr         = Localization.Parse("{GEN_LPROMPT}", new Dictionary <string, string>
                {
                    ["%sysname"] = CurrentSave.SystemName
                });
                ev = (text) =>
                {
                    if (progress == 0)
                    {
                        string getuser = text.Remove(0, loginstr.Length);
                        if (!string.IsNullOrWhiteSpace(getuser))
                        {
                            if (CurrentSave.Users.FirstOrDefault(x => x.Username == getuser) == null)
                            {
                                Console.WriteLine();
                                Console.WriteLine("{ERR_NOUSER}");
                                goback = true;
                                progress++;
                                TerminalBackend.TextSent -= ev;
                                return;
                            }
                            username = getuser;
                            progress++;
                        }
                        else
                        {
                            Console.WriteLine();
                            Console.WriteLine("{ERR_NOUSER}");
                            TerminalBackend.TextSent -= ev;
                            goback = true;
                            progress++;
                        }
                    }
                    else if (progress == 1)
                    {
                        string passwordstr = Localization.Parse("{GEN_PASSWORD}: ");
                        string getpass     = text.Remove(0, passwordstr.Length);
                        var    user        = CurrentSave.Users.FirstOrDefault(x => x.Username == username);
                        if (user.Password == getpass)
                        {
                            Console.WriteLine();
                            Console.WriteLine("{GEN_WELCOME}");
                            CurrentUser = user;
                            progress++;
                        }
                        else
                        {
                            Console.WriteLine();
                            Console.WriteLine("{RES_DENIED}");
                            goback = true;
                            progress++;
                        }
                        TerminalBackend.TextSent -= ev;
                    }
                };
                TerminalBackend.TextSent += ev;
                Console.WriteLine();
                Console.Write(loginstr);
                ConsoleEx.Flush();
                while (progress == 0)
                {
                    Thread.Sleep(10);
                }
                if (goback)
                {
                    goto Login;
                }
                Console.WriteLine();
                Console.Write("{GEN_PASSWORD}: ");
                ConsoleEx.Flush();
                while (progress == 1)
                {
                    Thread.Sleep(10);
                }
                if (goback)
                {
                    goto Login;
                }
            }
            TerminalBackend.PrefixEnabled  = true;
            Shiftorium.LogOrphanedUpgrades = true;
            Desktop.InvokeOnWorkerThread(new Action(() =>
            {
                ShiftOS.Engine.Scripting.LuaInterpreter.RunSft(Paths.GetPath("kernel.sft"));
            }));


            Desktop.InvokeOnWorkerThread(new Action(() => Desktop.PopulateAppLauncher()));
            GameReady?.Invoke();

            if (!string.IsNullOrWhiteSpace(CurrentSave.PickupPoint))
            {
                try
                {
                    if (Story.Context == null)
                    {
                        Story.Start(CurrentSave.PickupPoint);
                    }
                }
                catch { }
            }
        }
示例#14
0
 public static void Detach_ServerManager_MessageReceived()
 {
     MessageReceived -= new ServerMessageReceived(ServerManager_MessageReceived);
 }
 protected override void Because()
 {
     this.result = (ServerMessageReceived)sut.MakeFrom("any message at all");
 }