예제 #1
0
        private void MapImg_Click(object sender, EventArgs e)
        {
            MouseEventArgs me          = (MouseEventArgs)e;
            Point          coordinates = me.Location;

            OutPut.AppendText(Environment.NewLine + "[Click] x:" + coordinates.X + "   y:" + coordinates.Y);
        }
예제 #2
0
 private void WriteLog(object sendingProcess, DataReceivedEventArgs outLine)
 {
     if (!string.IsNullOrEmpty(outLine.Data))
     {
         OutPut.Dispatcher.Invoke(new Action(delegate { OutPut.AppendText(outLine.Data + "\r\n"); }));
     }
 }
예제 #3
0
        public async Task Send(ClientWebSocket webSocket, string stringToSend)
        {
            if (webSocket.CloseStatus == WebSocketCloseStatus.NormalClosure)
            {
                OutPut.AppendText(Environment.NewLine + "Rcon websocket closed with msg: " + webSocket.CloseStatusDescription);
            }
            else
            {
                byte[] sendBytes  = Encoding.UTF8.GetBytes(stringToSend + Environment.NewLine);
                var    sendBuffer = new ArraySegment <byte>(sendBytes);

                await webSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, false, cts.Token);

                OutPut.AppendText(Environment.NewLine + "Client: " + stringToSend);
            }
        }
예제 #4
0
 public void OutPutPingServer()
 {
     if (Status != null)
     {
         OutPut.AppendText(
             "   Server is UP" + Environment.NewLine +
             "   CurrentVersion: " + Status.version.io + Environment.NewLine +
             "   CurrentTime: " + Status.env.time + Environment.NewLine +
             "   Players: " + Status.players + " / " + Status.maxplayers + Environment.NewLine +
             "   Sleepers: " + Status.sleepers + Environment.NewLine +
             "   Level:" + Status.level + Environment.NewLine +
             "   World Size: " + Status.world.size + Environment.NewLine +
             "   World Seed:" + Status.world.seed + Environment.NewLine);
     }
     else
     {
         OutPut.AppendText("   Server is not responding" + Environment.NewLine);
     }
 }
예제 #5
0
        private void wsGreet()
        {
            try
            {
                var uri = "ws://" + SettingsForm.ServerNameBox.Text + ":" + SettingsForm.ServerPortBox.Text + "/ms";

                WSArray.Add(new ClientWebSocket());
                WSArray[0].Options.SetRequestHeader("Origin", "http://playrust.io");
                WSArray[0].Options.Cookies = new CookieContainer();

                // Build session cookie
                Cookie SIDCookie = new Cookie()
                {
                    Name   = "sid",
                    Value  = SettingsForm.SIDBox.Text,
                    Domain = SettingsForm.ServerNameBox.Text
                };

                WSArray[0].Options.Cookies.Add(SIDCookie);

                // Connect to websocket
                WSArray[0].ConnectAsync(new Uri(uri), cts.Token);

                while (WSArray[0].State != WebSocketState.Open)
                {
                    //Wait for the socket to be connected and open
                }

                // Recive data
                Task.WhenAll(Receive(WSArray[0]));
            }
            catch (Exception ex)
            {
                OutPut.AppendText("Error: " + ex.Message + Environment.NewLine);
            }
        }
예제 #6
0
        public async Task Receive(ClientWebSocket webSocket)
        {
            byte[] buffer         = new byte[1024];
            string wsTextResponse = string.Empty;

            while (webSocket.State != WebSocketState.Closed)
            {
                //WebSocket.CreateClientBuffer()
                var result = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer), cts.Token);

                if (result.MessageType == WebSocketMessageType.Close)
                {
                    await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, cts.Token);
                }
                else
                {
                    // Clean string
                    wsTextResponse = Uri.UnescapeDataString(Encoding.UTF8.GetString(buffer).Replace("\0", ""));

                    // Main loop
                    if (wsTextResponse.Length > 0)
                    {
                        String[]             CommandLst  = wsTextResponse.Split(new[] { ' ' }, 2);
                        DateTime             timestamp   = DateTime.Now;
                        Models.world.@object WorldObject = null;

                        // Records type
                        switch (CommandLst[0])
                        {
                        case "hello":
                            OutPut.AppendText(Environment.NewLine + "Server synced: Hello CMD");
                            break;

                        case "l":
                        case "s":
                        case "b":
                        case "p":
                        case "S":
                        case "h":
                            Models.world.@object InWorldObject = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.world.@object>(CommandLst[1]);
                            WorldObject = WorldObjects.Where(wo => wo.id == InWorldObject.id).FirstOrDefault();

                            if (WorldObject == null)
                            {
                                // Give Object a Icon
                                InWorldObject = MapMgr.LoadWorldObjectImage(InWorldObject, CommandLst[0], MapImg);

                                // Add Object
                                WorldObjects.Add(InWorldObject);
                            }
                            else
                            {
                                // Set Icon
                                InWorldObject.Icon = WorldObject.Icon;

                                // Update Object
                                var ValidCustomers = WorldObjects.Where(c => c.id == InWorldObject.id).ToList();
                                ValidCustomers.ForEach(wo => { wo.x = InWorldObject.x; wo.z = InWorldObject.z; wo.r = InWorldObject.r; wo.k = InWorldObject.k; });
                            }

                            MapMgr.DrawMovingWorldObjects(WorldObjects, MapImg, Status);
                            break;

                        case "player.death":
                            Models.player.death PlayerDeath = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.player.death>(CommandLst[1]);
                            OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + "[" + PlayerDeath.id + "] " + PlayerDeath.name + " was killed by " + PlayerDeath.lastDamage);
                            break;

                        case "player.chat":
                            Models.player.chat PlayerChat = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.player.chat>(CommandLst[1]);

                            // I think 0 means the websocket chat is disabled
                            if (PlayerChat.message == "0" | PlayerChat.message == "1")
                            {
                                OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + PlayerChat.name + " says something");
                            }
                            else
                            {
                                OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + PlayerChat.name + ": " + PlayerChat.message);
                            }
                            break;

                        case "player.spawn":
                            Models.player.spawn PlayerSpawn = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.player.spawn>(CommandLst[1]);
                            OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + "[" + PlayerSpawn.id + "] " + PlayerSpawn.name + " has respawn");
                            break;

                        case "player.connect":
                            Models.player.connect PlayerConnect = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.player.connect>(CommandLst[1]);
                            OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + "[" + PlayerConnect.id + "] " + PlayerConnect.name + " has connected");
                            break;

                        case "session":
                            Session = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.server.Session>(CommandLst[1]);
                            OutPut.AppendText(Environment.NewLine + "{" + timestamp.ToString() + "}" + "[Server] You are logged in as id:" + Session.id);
                            break;

                        default:
                            OutPut.AppendText(Environment.NewLine + "Server sent unknown record type: " + wsTextResponse);
                            break;
                        }

                        MapImg.Refresh();
                        buffer = new byte[1024];
                    }
                }
            }
        }