Changeset 588 for Daodan


Ignore:
Timestamp:
Feb 11, 2011, 9:21:14 AM (14 years ago)
Author:
gumby
Message:
 
Location:
Daodan/MSVC
Files:
3 added
7 edited

Legend:

Unmodified
Added
Removed
  • Daodan/MSVC/Flatline.c

    r587 r588  
    2727
    2828
    29 bool FLrServer_Run()
    30 {
    31         // Get the local hostname
    32         char szHostName[255];
    33         struct hostent *host_entry;
    34         gethostname(szHostName, 255);
    35 
    36         host_entry=gethostbyname(szHostName);
    37         DDrConsole_PrintF("Server started at %s...", inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list));
    38         return NetUDPServer_Listen(27777, FLrServer_PacketCallback);
    39 }
     29
    4030
    4131short TRrAnimation_GetType(char* anim)
  • Daodan/MSVC/Flatline_BSL.c

    r587 r588  
    6363                sprintf(message.data, "%s", args[0].value_str32);
    6464                NetUDPSocket_Send(client_sock, (sockaddr*)&address, (char*)&message, 257);
     65        }
     66        else if(MsNet_Running) {
     67                MSNet_SendChat( args[0].value_str32 );
    6568        }
    6669        else {
  • Daodan/MSVC/Flatline_Server.c

    r586 r588  
    22#include "Flatline_Server.h"
    33#include <Windows.h>
    4 
     4#include "PortForwardWrapper.h"
    55//I hereby apologize for the uglyness of the below code.
    66//It was never intended to be "final" code, much less shared with anyone
     
    376376        return true;
    377377}
     378
     379
     380
     381bool FLrServer_Run()
     382{
     383        HRESULT ret;
     384        PortMappingContainer_C PMC =
     385        {
     386                "",
     387                "27777",
     388                "27777",
     389                "UDP",
     390                "",
     391                "",
     392                "Flatline!"
     393        };
     394        // Get the local hostname
     395        char szHostName[255];
     396        struct hostent *host_entry;
     397        gethostname(szHostName, 255);
     398
     399        host_entry=gethostbyname(szHostName);
     400
     401        strcpy( PMC.InternalClient, inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list) );
     402        ret = uPnP_Forward( &PMC );
     403        if(!ret)
     404        {
     405                DDrConsole_Print( "Port Forwarded" );
     406        }
     407        else
     408        {
     409                LPSTR Message;
     410                FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, &ret,0,0,&Message,0,NULL);
     411                DDrConsole_Print( Message );
     412        }
     413
     414        DDrConsole_PrintF("Server started at %s...", inet_ntoa (*(struct in_addr *)*host_entry->h_addr_list));
     415        return NetUDPServer_Listen(27777, FLrServer_PacketCallback);
     416}
  • Daodan/MSVC/Mariusnet.c

    r587 r588  
    2020bool RoomListGotten = 0;
    2121
    22 bool Are_We_Logged_In = 0;
    23 
    24 RGBA blue =             {0xFF, 0, 0, 0};
     22bool MariusNet_LoggedIn = 0;
     23
     24bool MsNet_Running = 0;
     25int Marius_Socket = -1;
     26int Room_Socket = -1;
     27sockaddr_in RoomAddr = {0};
     28int PlayerID = 0;
     29/*
     30
    2531RGBA green =    {0, 0xFF, 0, 0};
    2632RGBA red =              {0, 0, 0xFF, 0};
    2733
    2834RGBA grey = {0x80,0x80,0x80,0x80};
    29 
     35*/
     36extern RGBA red;
     37//extern RGBA blue;
     38RGBA blue =             {0xFF, 0, 0, 0};
     39RGBA cyan =             {0xFF, 0xFF, 0, 0};
     40RGBA white =            {0xFF, 0xFF, 0xFF, 0};
     41extern RGBA green;
     42extern RGBA grey;
    3043int MariusNet_OutgoingPacketWrapper(int socket, const sockaddr* address, marius_packet* data, short datalen)
    3144{
     
    259272
    260273}
     274
     275void MSNet_HandleChat( m_message* msg )
     276{
     277        //BGRA *cough*
     278        /*RGBA chatcolor;
     279        chatcolor.R = (msg->PrimaryColor.Red);
     280        chatcolor.G = (msg->PrimaryColor.Green);
     281        chatcolor.B = (msg->PrimaryColor.Blue);
     282        chatcolor.A = 0;*/
     283        char Message[1024];
     284        int NameLen = sprintf_s( Message, 1024, "%s", msg->Message ) + 1;
     285        sprintf_s( Message, 1024 - NameLen, "%s: %s", Message, msg->Message + NameLen );
     286        //DDrConsole_PrintColored( msg->Message, 0, chatcolor,white );
     287        DDrConsole_Print(Message);
     288}
     289
     290void MSNet_SendChat( char* msg )
     291{
     292        marius_packet mPacket = {0};
     293        int len;
     294        if(!MsNet_Running || !MariusNet_LoggedIn) return;
     295       
     296        Initialize_MPacket(&mPacket, pt_ChatMessage);
     297
     298       
     299        mPacket.message.SecondaryColor.Red = mPacket.message.SecondaryColor.Flags = -1;
     300       
     301
     302
     303        //mPacket.message.Message = 'Gumby';
     304        len = sprintf(mPacket.message.Message, "O %s", msg );
     305        mPacket.message.Message[1] = 0;
     306        mPacket.message.SenderId = htonl(PlayerID);
     307        //mPacket.message.TargetId = -1;
     308        MariusNet_OutgoingPacketWrapper(Room_Socket, (sockaddr*)&RoomAddr, (char*)&mPacket,
     309                sizeof(marius_header) + sizeof(m_message) - (255 - len) );
     310
     311
     312}
     313
     314int MSNet_Cleanup()
     315{
     316        if( Marius_Socket != -1) closesocket(Marius_Socket);
     317        Marius_Socket = -1;
     318        if( Room_Socket != -1) closesocket(Room_Socket);
     319        Room_Socket = -1;
     320        memset(RoomList, 0, sizeof(m_room) * 64 );
     321        DDrConsole_PrintF("The metaserver connection will now close." );
     322        MsNet_Running = 0;
     323        MariusNet_LoggedIn = 0;
     324        return 1;
     325}
     326
     327void MSNet_HandleGameList( m_gameinfo* PacketGames, int PacketSize )
     328{
     329        m_gameinfo TempGameList[64] = {0};
     330        int i ;
     331        for( i = 0; PacketSize > 0; i++ )
     332        {
     333                int ThisSize = sizeof(m_gameinfo) + ntohs(PacketGames->len) - sizeof(m_gamedescription);
     334               
     335                memcpy(TempGameList + i,PacketGames, sizeof(m_gameinfo) - 128);
     336
     337                sprintf_s( TempGameList[i].g.Buffer, 128, "%s", PacketGames->g.Buffer);
     338                PacketSize -= ThisSize;
     339                PacketGames = (m_gameinfo*)((char*)PacketGames + ThisSize);
     340               
     341        }
     342        //Do stuff with the games.
     343}
     344
    261345int MSNet_Room_Join( short Room, char* Key)
    262346{
     
    268352
    269353        sockaddr_in SockAddr;
    270         int Room_Socket = NetTCPSocket_Create(RoomList[Room].Port, &SockAddr);
    271 
    272         sockaddr_in RoomAddr = {0};
    273354        RoomAddr.sin_port = RoomList[Room].Port;
    274355        RoomAddr.sin_family = AF_INET;
    275356        RoomAddr.sin_addr.S_un.S_addr = RoomList[Room].IPAddress;
    276357       
    277 
     358        Room_Socket = NetTCPSocket_Create(RoomList[Room].Port, &SockAddr);
    278359
    279360        DDrConsole_PrintF("Joining room %hi", Room);
     
    282363        {
    283364                DDrConsole_PrintF("Failed to initialize room socket!");
     365                return MSNet_Cleanup();
    284366        }
    285367       
     
    287369        {
    288370                NetCatchError();
    289                 return 1;
     371                MariusNet_LoggedIn = 0;
     372                return MSNet_Cleanup();
    290373        }
    291374       
     
    306389        if(MariusNet_IncomingPacketWrapper(Room_Socket, incomingData, 1400, 0) == SOCKET_ERROR)
    307390        {
    308                 return 0;
     391                return MSNet_Cleanup();
    309392        }
    310393
     
    313396                //DDrConsole_PrintF("Login failed: %s", incomingPacket->login_denied.DenialMessage );
    314397                MSNet_LoginError_Output(ntohl(incomingPacket->login_denied.code));
    315                 return 0;
    316         }
    317 
     398                return MSNet_Cleanup();
     399        }
     400
     401        MariusNet_LoggedIn = 1;
     402
     403        /*
     404        Initialize_MPacket(&mPacket, 104);
     405        mPacket.newgame.g.maxplayers = -1;
     406        mPacket.newgame.g.clientversion = htonl(0xc136e436);
     407        mPacket.newgame.g.maxteams = -1;
     408        //sprintf(mPacket.newgame.g.Buffer, "Oni!");
     409        memcpy(mPacket.newgame.g.Buffer, "Blam!\0This is Oni, bitch.\0", 50);
     410        sent_bytes = MariusNet_OutgoingPacketWrapper(Room_Socket, (sockaddr*)&RoomAddr, (char*)&mPacket,
     411                sizeof(marius_header) + sizeof(m_announcegame) + 50);
     412        */
    318413        while(1)
    319414        {
     
    326421                case pt_RoomList:
    327422                case pt_PlayerInfo:
    328                 case pt_GameList:
    329423                case pt_PlayerList:
    330424                        //Do nothing for now
    331425                        break;
     426                case pt_GameList:
     427                        MSNet_HandleGameList( incomingPacket->gamelist.Games, 
     428                                ntohl(incomingPacket->header.PacketSize) - sizeof(marius_header));
     429                        break;
    332430                case pt_BlueBarMsg:
    333                         DDrConsole_PrintColored(incomingPacket->motd.Message, 0, blue, grey );
     431                        DDrConsole_PrintColored(incomingPacket->motd.Message, 0, cyan, grey );
    334432                        break;
    335433                case pt_ChatMessage:
     434                        MSNet_HandleChat(&incomingPacket->message);
    336435                        break;
    337436                case pt_KeepAlive:
     
    351450{
    352451        int Port = 4156;
    353         int Marius_Socket = -1;
    354         int PlayerID;
     452       
     453       
    355454        char RoomToken[33] = {0};
    356455        int i = 0;
    357 
     456       
    358457       
    359458       
    360459        sockaddr_in Marius_Addr = {0};
    361        
    362         if(Are_We_Logged_In)
     460        if(MsNet_Running)
     461        {
     462                DDrConsole_PrintF("The metaserver handler is already running!");
     463        }
     464        MsNet_Running = 1;
     465
     466        if(MariusNet_LoggedIn)
    363467        {
    364468                DDrConsole_PrintF("You're already logged in!");
    365                 return 0;
     469                return MSNet_Cleanup();
    366470        }
    367471
     
    371475        if(MariusNet_Initialize())
    372476        {
    373                 return 0;
     477                return MSNet_Cleanup();
    374478        }
    375479
     
    398502                {
    399503                        NetCatchError();
    400                         return 0;
     504                        return MSNet_Cleanup();
    401505                }
    402506                DDrConsole_PrintF("Sending Player Info...");
     
    412516                if(MariusNet_IncomingPacketWrapper(Marius_Socket, incomingData, 1400, 0) == SOCKET_ERROR)
    413517                {
    414                         return 0;
     518                        return MSNet_Cleanup();
    415519                }
    416520               
     
    450554                        if(!NetUDPSocket_Recieve(Marius_Socket, (sockaddr*)&Marius_Addr,incomingData, &incomingLength))
    451555                        {
    452                                 return 0;
     556                                return MSNet_Cleanup();
    453557                        }
    454558                        DDrConsole_PrintF("Password ACK!");
     
    465569                                if(MariusNet_IncomingPacketWrapper(Marius_Socket, incomingData, 1400, 0) == SOCKET_ERROR)
    466570                                {       
    467                                         return 0;
     571                                        return MSNet_Cleanup();
    468572                                }
    469573                        }
     
    482586                        //DDrConsole_PrintF("Login failed: %s", incomingPacket->login_denied.DenialMessage );
    483587                        MSNet_LoginError_Output(ntohl(incomingPacket->login_denied.code));
    484                         return 0;
     588                        return MSNet_Cleanup();
    485589                }
    486590                else
    487591                {
    488                         DDrConsole_PrintF("Something went wrong! Disconnecting from Mariusnet");
    489                         return 0;
     592                        return MSNet_Cleanup();
    490593                }
    491594
     
    495598                        if(MariusNet_IncomingPacketWrapper(Marius_Socket, incomingData, 1400, 0) == SOCKET_ERROR)
    496599                        {       
    497                                 return 0;
     600                                return MSNet_Cleanup();
    498601                        }
    499602                        if(ntohs(incomingPacket->header.PacketId)== pt_RoomList)
     
    512615                        {
    513616                                DDrConsole_PrintF("Invalid packet type %hi", ntohs(incomingPacket->header.PacketId));
    514                                 return 0;
     617                                return MSNet_Cleanup();
    515618                        }
    516619                }
  • Daodan/MSVC/Mariusnet_Defs.h

    r587 r588  
    167167typedef struct
    168168{
    169 
    170     ColorStuff : TColorInfo;
     169        m_colour        PrimaryColor;
     170        m_colour        SecondaryColor;
    171171        int    SenderId;
    172172    int         TargetId;
    173173    char Message[256];
    174 }
    175 
    176 
     174} m_message;
     175
     176typedef struct
     177{
     178        short unknown16;
     179        short type;
     180        int options;
     181        int timelimit;
     182        int checksum;
     183        short difficulty;
     184        short maxplayers;
     185        short teamrandomseed;
     186        short maxteams; //-1
     187        int planningtime;
     188        int unusedint;
     189        int unusedint_2;
     190        short unknown16_2;
     191        short pluginflag;
     192        char pluginlist[512];
     193        int clientversion;//0xc136e436
     194        int unknownint;
     195        short status;
     196        short numplayers;
     197        char action;
     198        char pad[3];
     199        char Buffer[128];
     200} m_gamedescription;
     201
     202typedef struct
     203{
     204        short port;
     205        short zero;
     206        m_gamedescription g;
     207} m_announcegame;
     208
     209typedef struct
     210{
     211        unsigned int    gameID;
     212        unsigned int    ipAddress;
     213        unsigned short  port;
     214        unsigned char   verb;
     215        unsigned char   gameEnable;
     216        unsigned int    timeRemaining;
     217        unsigned int    hostPlayerID;
     218        unsigned short  len;
     219        int unused1;
     220        int unused2;
     221        short pad;
     222        m_gamedescription g;
     223} m_gameinfo;
     224
     225typedef struct
     226{
     227        m_gameinfo Games[];
     228} m_gamelist;
    177229typedef struct
    178230{
     
    190242                m_player_info player_info;
    191243                m_motd motd;
     244                m_message message;
     245                m_announcegame newgame;
     246                m_gamelist gamelist;
    192247        };
    193248} marius_packet;
  • Daodan/MSVC/Mariusnet_Public.h

    r587 r588  
     1extern bool MsNet_Running;
     2
    13bool MSNet_Login(char* username, char* password);
     4void MSNet_SendChat( char* msg );
Note: See TracChangeset for help on using the changeset viewer.