コード例 #1
0
ファイル: Form1.cs プロジェクト: ParadiseFallen/AsyncServer
 /*File or directory*/
 private void Open(string Path)
 {
     if (Path.Contains("."))
     {
         /*File*/
         new FileInfo(Path).Open(FileMode.Open);
     }
     else
     {
         DirectoryData.Clear();
         LoadDirectoryInfo(Path);
         /*Directory*/
     }
 }
コード例 #2
0
        ///
        /// <summary>
        ///		Handles the Tick event of the ServerTimer control.
        ///		This is where the server logic is performed.
        /// </summary>
        ///
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        ///
        private void ServerTimer_Tick(Object sender, EventArgs e)
        {
            // Update the clients list.
            ListViewItemCollection players = new ListViewItemCollection(PlayersView);

            players.Clear();
            foreach (NetConnection client in server.Connections)
            {
                players.Add(new ListViewItem(new String[] { client.Status.ToString(), client.RemoteEndPoint.Address.ToString() }));
            }

            // Read all incoming messages.
            NetIncomingMessage message;
            int messageCount = 0;

            while ((message = server.ReadMessage()) != null)
            {
                messageCount++;

                switch (message.MessageType)
                {
                case NetIncomingMessageType.VerboseDebugMessage:
                case NetIncomingMessageType.DebugMessage:
                case NetIncomingMessageType.WarningMessage:
                case NetIncomingMessageType.ErrorMessage:

                    log("Info", message.ReadString());

                    break;


                case NetIncomingMessageType.Data:

                    switch (message.ReadUInt32())
                    {
                    // Client requested world refresh.
                    case Game.NETWORK_REFRESH_REQUEST:
                        sendWorldRefresh(message.SenderConnection);
                        log("Info", "Sent a world refresh to " + message.SenderConnection);
                        break;


                    case Game.NETWORK_TILE_UPDATE_REQUEST:

                        int tileX = message.ReadInt32();
                        int tileZ = message.ReadInt32();

                        Tile updatedTile = Tile.readFromNetwork(ref message);

                        world.tiles[tileX, tileZ] = updatedTile;

                        log("Info", "Received new tile data at " + tileX + ", " + tileZ + ". (" + world.tiles[tileX, tileZ].getName() + ")");

                        foreach (NetConnection client in server.Connections)
                        {
                            NetOutgoingMessage tileUpdateResponse = server.CreateMessage();
                            tileUpdateResponse.Write(Game.NETWORK_TILE_UPDATE_RESPONSE);
                            tileUpdateResponse.Write(tileX);
                            tileUpdateResponse.Write(tileZ);
                            writeTileData(tileX, tileZ, ref tileUpdateResponse);

                            server.SendMessage(tileUpdateResponse, client, NetDeliveryMethod.ReliableOrdered);

                            //log("Info", "Relaying tile data to " + client.RemoteEndPoint.Address.ToString());

                            //sendWorldRefresh(client);
                        }
                        break;


                    case Game.NETWORK_NEW_ITEM_REQUEST:

                        float itemX = message.ReadFloat();
                        float itemZ = message.ReadFloat();

                        Item newItem = Item.readFromNetwork(ref message);

                        newItem.position = new Vector2(itemX, itemZ);

                        world.items.Add(newItem);

                        foreach (NetConnection client in server.Connections)
                        {
                            NetOutgoingMessage newItemResponse = server.CreateMessage();
                            newItemResponse.Write(Game.NETWORK_NEW_ITEM_RESPONSE);
                            newItemResponse.Write(itemX);
                            newItemResponse.Write(itemZ);
                            writeItemData(newItem, ref newItemResponse);

                            server.SendMessage(newItemResponse, client, NetDeliveryMethod.ReliableOrdered);

                            log("Info", "Relaying item data to " + client.RemoteEndPoint.Address.ToString());
                        }

                        break;


                    default:
                        log("Error", "Unknown message from client!");
                        break;
                    }

                    break;

                case NetIncomingMessageType.ConnectionApproval:
                    message.SenderConnection.Approve();
                    break;

                case NetIncomingMessageType.DiscoveryRequest:

                    NetOutgoingMessage response = server.CreateMessage();
                    server.SendDiscoveryResponse(response, message.SenderEndPoint);

                    break;

                case NetIncomingMessageType.StatusChanged:
                    log("Net", "Server->Client status changed: " + message.SenderConnection.Status);
                    break;

                default:
                    log("Error", "Unhandled message type: " + message.MessageType);
                    break;
                }

                server.Recycle(message);
            }
        }