send chat messages to server
[carveJwlIkooP6JGAAIwe30JlM.git] / network.c
index 9bf240046db3c20d02ba3c44669a32223286ae31..2219a1ce8cedd8b3b8e9999ad1f3c2fcee1ca7cd 100644 (file)
--- a/network.c
+++ b/network.c
@@ -447,6 +447,40 @@ static void network_update(void){
    }
 }
 
+static void chat_send_message( const char *message ){
+   if( !network_connected() ){
+      return;
+   }
+
+   netmsg_chat *chat = alloca( sizeof(netmsg_chat) + NETWORK_MAX_CHAT );
+   chat->inetmsg_id = k_inetmsg_chat;
+   chat->client = 0;
+
+   u32 l = vg_strncpy( message, chat->msg, NETWORK_MAX_CHAT, 
+                       k_strncpy_always_add_null );
+
+   SteamAPI_ISteamNetworkingSockets_SendMessageToConnection(
+         hSteamNetworkingSockets, network_client.remote, 
+         chat, sizeof(netmsg_chat)+l+1,
+         k_nSteamNetworkingSend_Reliable, NULL );
+}
+
+static int cmd_network_send_message( int argc, const char *argv[] ){
+   char buf[ NETWORK_MAX_CHAT ];
+   vg_str str;
+   vg_strnull( &str, buf, NETWORK_MAX_CHAT );
+
+   for( int i=0; i<argc; i ++ ){
+      vg_strcat( &str, argv[i] );
+
+      if( i < argc-1 )
+         vg_strcatch( &str, ' ' );
+   }
+
+   chat_send_message( buf );
+   return 0;
+}
+
 static void network_init(void){
    vg_console_reg_var( "network_info", &network_client.network_info,
                        k_var_dtype_i32, VG_VAR_PERSISTENT );
@@ -468,6 +502,8 @@ static void network_init(void){
       steam_register_callback( k_iPersonaStateChange, 
                                on_persona_state_change );
       request_auth_ticket();
+
+      vg_console_reg_cmd( "say", cmd_network_send_message, NULL );
    }
 }